{"_id":"@hasna/hooks","_rev":"82-ab349f3d756082d310c42d6d71c64ae4","name":"@hasna/hooks","dist-tags":{"latest":"0.11.0"},"versions":{"0.0.1":{"name":"@hasna/hooks","version":"0.0.1","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"MIT","_id":"@hasna/hooks@0.0.1","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/open-hooks#readme","bugs":{"url":"https://github.com/hasna/open-hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"13774419b7837210f50493d4a8aa0210339d65b4","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.0.1.tgz","fileCount":110,"integrity":"sha512-gUIjyhae+yUTN8pLwT1QILAwj7wP+vamKh+d9RxkbxRV8BSSVdE0DHjJJnYwIZy7eTNHHSV7n43lfhYDeCVaZg==","signatures":[{"sig":"MEYCIQCGcJdzhP5F6Kaklf9tYz+Br21u/54xBqLLQXvgfCNb5gIhAJFeh5hspXQb3sR29rtwwjtbQKnjXR0vWMdCA7Wv/9W0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":565548},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","build":"bun build ./src/cli/index.tsx --outdir ./bin --target bun --external ink --external react --external chalk --external conf && bun build ./src/index.ts --outdir ./dist --target bun","typecheck":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/open-hooks.git","type":"git"},"_npmVersion":"11.8.0","description":"Open source Claude Code hooks library - Install hooks with a single command","directories":{},"_nodeVersion":"24.9.0","dependencies":{"ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.0.1_1771059971862_0.3607289408916259","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@hasna/hooks","version":"0.0.2","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"MIT","_id":"@hasna/hooks@0.0.2","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/open-hooks#readme","bugs":{"url":"https://github.com/hasna/open-hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"01f0de1ab5ec32213cacbb385ee3558f82411232","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.0.2.tgz","fileCount":53,"integrity":"sha512-55npuQwlyI8Qiab8kkOx/a7dFonQsb60mYFAAMlzPyNobx0OstTpbb6ugmO7payoSTL4IpbQBmEbakfOtYsmfw==","signatures":[{"sig":"MEUCIQCzJEphvBzE8ax/e/ki5YxfOZnyNgL9adGjjRM1rYdCAAIgFVYFpijLNuRwSEObrXAjOVaBjSeux6/Ti8tRnXpUNiw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":257935},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","build":"bun build ./src/cli/index.tsx --outdir ./bin --target bun --external ink --external react --external chalk --external conf && bun build ./src/index.ts --outdir ./dist --target bun","typecheck":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/open-hooks.git","type":"git"},"_npmVersion":"11.8.0","description":"Open source Claude Code hooks library - Install hooks with a single command","directories":{},"_nodeVersion":"24.9.0","dependencies":{"ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.0.2_1771060133148_0.8871483161775557","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@hasna/hooks","version":"0.0.3","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"MIT","_id":"@hasna/hooks@0.0.3","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/open-hooks#readme","bugs":{"url":"https://github.com/hasna/open-hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"5dd601c0c1cb9f16dd05b14c6b0329e8e0f05c63","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.0.3.tgz","fileCount":54,"integrity":"sha512-H9vYHHZGh6HH0dOBh/AWet+8Jz2bANeoTBqg4YXwSE/i/Vc2YEYM2VL6Az50obUG1TutYIUfn7OlG/21A1fh8A==","signatures":[{"sig":"MEUCIDPNOIiQOfdGQjYGRiHkO11xktMlNUwSMfK3T5pSXvVzAiEAvqZ5i+bZtC7WUPukvGFxA8pOQzb2wmlKOpEkV7pw1ro=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":258216},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","build":"bun build ./src/cli/index.tsx --outdir ./bin --target bun --external ink --external react --external chalk --external conf && bun build ./src/index.ts --outdir ./dist --target bun","typecheck":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/open-hooks.git","type":"git"},"_npmVersion":"11.8.0","description":"Open source Claude Code hooks library - Install hooks with a single command","directories":{},"_nodeVersion":"24.9.0","dependencies":{"ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.0.3_1771060591502_0.45855696916574273","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@hasna/hooks","version":"0.0.4","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"MIT","_id":"@hasna/hooks@0.0.4","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/open-hooks#readme","bugs":{"url":"https://github.com/hasna/open-hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"bd52f7c13f02cde3b42225c99509e942e884a410","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.0.4.tgz","fileCount":54,"integrity":"sha512-vk/6aqmI2FDzxGjc82rMwJJvDnFxJUi5Rnflk+zRj52ShSI103TvW913ZevGFB4h0EWrP6tls2ZiR+2ZzSyuhg==","signatures":[{"sig":"MEUCIQC6gsA9K6DmoGhmUcMJoLt3MbcSlPiHQTC2OKvTpGpzqAIgAiBqRe+3aV54HU1pqQLvb5EbRTvQnsvhqFBU5Q6pjnA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":258250},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","build":"bun build ./src/cli/index.tsx --outdir ./bin --target bun --external ink --external react --external chalk --external conf && bun build ./src/index.ts --outdir ./dist --target bun","typecheck":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/open-hooks.git","type":"git"},"_npmVersion":"11.8.0","description":"Open source Claude Code hooks library - Install hooks with a single command","directories":{},"_nodeVersion":"24.9.0","dependencies":{"ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.0.4_1771060662443_0.08107256103430127","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@hasna/hooks","version":"0.0.5","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"MIT","_id":"@hasna/hooks@0.0.5","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/open-hooks#readme","bugs":{"url":"https://github.com/hasna/open-hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"e168442dce37a64904626874b2ef2909f018af78","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.0.5.tgz","fileCount":87,"integrity":"sha512-eefi/56UpJyGanvwtWbxJpIDzInCsqdO007VunPmDe+/ZNKv2s/1ofvuPDUIEQoVnDVBDC+dYhn0HN/CRuISQw==","signatures":[{"sig":"MEUCICw2Zh9Iz6/oznUc2nEbrPeMwhFUjGkZ0qjFf0US9gq6AiEA7H/x+/gLrLJdJjHnxmh6UzDmdmPBDlSdBblNP/fhSoM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":549137},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"bun build ./src/cli/index.tsx --outdir ./bin --target bun --external ink --external react --external chalk --external conf && bun build ./src/index.ts --outdir ./dist --target bun","typecheck":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/open-hooks.git","type":"git"},"_npmVersion":"11.8.0","description":"Open source Claude Code hooks library - Install hooks with a single command","directories":{},"_nodeVersion":"24.9.0","dependencies":{"ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.0.5_1771061256595_0.7455543188130964","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@hasna/hooks","version":"0.0.6","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"MIT","_id":"@hasna/hooks@0.0.6","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/open-hooks#readme","bugs":{"url":"https://github.com/hasna/open-hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"ebf9246fb24cd8f5184b0157a4a210d1eb803496","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.0.6.tgz","fileCount":86,"integrity":"sha512-QQoYYVqPbMm1FVzVpVY7HFetpro5Agtp0IP/auVWWj2on+kLK9l5fxhfh7V+yO6k4pGb9CT5H7KuUSa6eEhWWg==","signatures":[{"sig":"MEMCHyrknW/dOkhnPa6tu8yVGypOH1uI10X/2dAV9eqJ7r4CIEaDUpNf7zERFqQK0WPQSfsxrRvB1/45Fn70ya3vwJ/9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":548000},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"bun build ./src/cli/index.tsx --outdir ./bin --target bun --external ink --external react --external chalk --external conf && bun build ./src/index.ts --outdir ./dist --target bun","typecheck":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/open-hooks.git","type":"git"},"_npmVersion":"11.8.0","description":"Open source Claude Code hooks library - Install hooks with a single command","directories":{},"_nodeVersion":"24.9.0","dependencies":{"ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.0.6_1771061796873_0.3660012173978524","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"@hasna/hooks","version":"0.0.7","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"MIT","_id":"@hasna/hooks@0.0.7","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/open-hooks#readme","bugs":{"url":"https://github.com/hasna/open-hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"681187ff63c06401d9bd9700c17f2c7736b95278","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.0.7.tgz","fileCount":87,"integrity":"sha512-Rn36DSZW/iuRQxzxlmdP/xjYA3H3plzqKnKTP7Wf51ZjuhZlg9YfX2zICmCF6O4GOlhPbnm/wi+QAK/rq2mvdQ==","signatures":[{"sig":"MEUCIQDBx3bbydY0sJToodZxZuPd51xwRMfsn4FuFzcDOJTF1QIgXoxbqfwFp+CwCdYlTrvPid1YwM+UR0iHHEpTgR4+skQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":561547},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"64a97be0b8038dd597ca07f7cf6628430acecd5a","scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"bun build ./src/cli/index.tsx --outdir ./bin --target bun --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts --outdir ./dist --target bun","typecheck":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/open-hooks.git","type":"git"},"_npmVersion":"11.8.0","description":"Open source Claude Code hooks library - Install hooks with a single command","directories":{},"_nodeVersion":"24.9.0","dependencies":{"ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.0.7_1771065816529_0.5613786761106021","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@hasna/hooks","version":"0.1.0","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"MIT","_id":"@hasna/hooks@0.1.0","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"6820ff27cccd96cbe717f5f0eb635bffab60604e","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.1.0.tgz","fileCount":132,"integrity":"sha512-uzvH5EAqJoLNjNbSW15AtAPq9Gcws/R2Fuckr5i4qHOEPlTSwsoxRRNpdg5oawk13ONpoPmP3fjkx5R7VJDD+g==","signatures":[{"sig":"MEUCIFi+EZl1toECps7SVYgd9IOq1sXHpzVZSBa20SFJm8SrAiEA4svJG8BuR0Sz7koJh9e0nGQRvdVXcysYPYVv79pOgh4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":673384},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"812a831a1ec0af431f5e2ede28d82915cea37a9f","scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"bun build ./src/cli/index.tsx --outdir ./bin --target bun --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts --outdir ./dist --target bun","typecheck":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"11.8.0","description":"Open source Claude Code hooks library - Install hooks with a single command","directories":{},"_nodeVersion":"24.9.0","dependencies":{"ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.1.0_1771066949649_0.43458811559538657","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@hasna/hooks","version":"0.1.1","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"MIT","_id":"@hasna/hooks@0.1.1","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"aab7efafce01d0181e193e2c0652c3d92d5e918e","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.1.1.tgz","fileCount":132,"integrity":"sha512-PvKc/5pYAFPAMLPbwhjR32Lb6X+9aMFty1uLTdlUjsHWF7WYV7jFinVYjCPhp7JiAX1iLMh3J700AwWx53Y08A==","signatures":[{"sig":"MEUCIQCD4OWpc4M7stZz8EBeOOp2+FbIcO6VsK6+sNibnX/7mQIgQUuVKz031HfpcRFvXEIEo/9v3oxGgul4GGFn40PzORE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":676631},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"b43a2547d5c49326c6c5d8cd7910cd01ae759c3e","scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"bun build ./src/cli/index.tsx --outdir ./bin --target bun --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts --outdir ./dist --target bun","typecheck":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"11.8.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"24.9.0","dependencies":{"ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.1.1_1771067784369_0.55715163185587","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@hasna/hooks","version":"0.2.0","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.2.0","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"1f53812c2984f8796ee73a4d117e68be27bd072d","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.2.0.tgz","fileCount":146,"integrity":"sha512-i2xbnXvT9G7UoexBAJajv6Hb3PsCAZ6+ZCMu8OVDK9d3nk7QbP88UwHqwGvTXG3sgr1r7vae+yqUtcqA0fdyGA==","signatures":[{"sig":"MEUCIGcN25m332iCY7r/Ej4VmoLFp2PFWsaauMS6nYeCOeSvAiEA/B6VDrxcF66vMY8hj0ZuO9UgmvoNt7l9UYIIE+pyEJ0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":749778},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"4341f5ecc5389c4208270146dcc1c9c75300a838","scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"bun build ./src/cli/index.tsx --outdir ./bin --target bun --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts --outdir ./dist --target bun","typecheck":"tsc --noEmit","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run build","dashboard:build":"cd dashboard && bun run build","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"11.10.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"25.2.1","dependencies":{"ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.2.0_1771099069395_0.8250368440226112","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@hasna/hooks","version":"0.2.1","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.2.1","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"6530810d0291078ef62aa794aff27343f061842a","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.2.1.tgz","fileCount":146,"integrity":"sha512-7HTto+mimghlJgeSJc7kJLtAcKJK9cFOUiujXzmWxdnaFjIFJVfysxoAWW17LSsL9nPTysSzm1SQNp+KnPxE4g==","signatures":[{"sig":"MEUCIFmhHg/sT04b4LIx9lUIu1kwj1xuj1dVPb6R9xPDglY/AiEA/qKpZtW2rRiHLqhOCKpfRFwkyjLLcDatlv28AJ6CZ64=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":750007},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"f66ab1fd0f800b36a85033c9ffcb7008ebe1c162","scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"bun build ./src/cli/index.tsx --outdir ./bin --target bun --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts --outdir ./dist --target bun","typecheck":"tsc --noEmit","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run build","dashboard:build":"cd dashboard && bun run build","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"11.10.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"25.2.1","dependencies":{"ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.2.1_1771101216702_0.5951262520282217","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@hasna/hooks","version":"0.2.2","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.2.2","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"bac995099a0f33af893af0e9dc48a1dd2b8c80be","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.2.2.tgz","fileCount":146,"integrity":"sha512-YbrfaTV+M7mcXoz20s6QPgxkEa5bO1rwJ+eU7Z40BcbQ4WQnCbJgN5qOjINADV7ZZxeH5/4f1PN4Jbyc8Vg5SQ==","signatures":[{"sig":"MEUCIQCOF2189Pc6VZMnx2yujMOYwcuKxGcs9VY0AtwS1aeR4gIgLC+YPeOwNWQ3KOb80ZqbmcI3R5kx3Fgg44DjnzN8yr4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":750133},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"d5d245d64d75cdd9428200527bb7a3347c611039","scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"bun build ./src/cli/index.tsx --outdir ./bin --target bun --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts --outdir ./dist --target bun","typecheck":"tsc --noEmit","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run build","dashboard:build":"cd dashboard && bun run build","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"11.10.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"25.2.1","dependencies":{"ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.2.2_1771142375623_0.9513586531375586","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@hasna/hooks","version":"0.2.3","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.2.3","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"33b86a727177a0beaeb8fcda229db45d9de85578","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.2.3.tgz","fileCount":170,"integrity":"sha512-vvWUitS4WTJF3I/iXybo+2Qea8HsIrMUB9zY9vJIQhBbYxqB13OIJAY64bo8YitOJVkV82zhmTJM2DUgVXVtaQ==","signatures":[{"sig":"MEYCIQCTJej7h8/ft2k3VlyitmrZDuB9xbzBVv1iJgkzaIHVrQIhAK5zd3yOh46eqWHuVsaT2xnG/Fwgrs2M5qqmrjcXayIG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1008301},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"8bb4e61ac67b45a9facbf588ef9745e29c488e17","scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"bun build ./src/cli/index.tsx --outdir ./bin --target bun --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts --outdir ./dist --target bun","typecheck":"tsc --noEmit","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run build","dashboard:build":"cd dashboard && bun run build","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"11.10.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"25.2.1","dependencies":{"ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.2.3_1771144584728_0.5076488382827362","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@hasna/hooks","version":"0.2.4","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":"Hasna","license":"Apache-2.0","_id":"@hasna/hooks@0.2.4","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"001b6efba5c05f466381f478d1d97a82c260bdd3","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.2.4.tgz","fileCount":175,"integrity":"sha512-Df4Fh0vdXqeR4CpsYW6kGAoVx+WuPDo+XAbBbI/iFWxGuH6k2yMkjdNM/wGRcaL53JSNzE+8nxmjCjU4x8GVRQ==","signatures":[{"sig":"MEYCIQC0QSsQkTDAlDSpWd/8QMN0z/9Tx/AvIWuCl5Fxb8j7NQIhAOsq7FMstG+MTC2llQOpCxcocZmft3253HKfUyf33+Xm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1051646},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","shasum":"001b6efba5c05f466381f478d1d97a82c260bdd3","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"bun build ./src/cli/index.tsx --outdir ./bin --target bun --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts --outdir ./dist --target bun","typecheck":"tsc --noEmit","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run build","dashboard:build":"cd dashboard && bun run build","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"_integrity":"sha512-Df4Fh0vdXqeR4CpsYW6kGAoVx+WuPDo+XAbBbI/iFWxGuH6k2yMkjdNM/wGRcaL53JSNzE+8nxmjCjU4x8GVRQ==","repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"10.8.3","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.2.4_1773750598000_0.6359532206532283","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@hasna/hooks","version":"0.2.5","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":"Hasna","license":"Apache-2.0","_id":"@hasna/hooks@0.2.5","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"75b8d3db0f0ef72677d5acfe390653490182d99a","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.2.5.tgz","fileCount":175,"integrity":"sha512-PAI4ykmslqSWFqkNSNr2ADACBirdDyuWlLuqil2phlthrKxgCjOCuJasxU/CyFvnLwSB6wrwqd9GHtcGEbGHmQ==","signatures":[{"sig":"MEUCIQDvLm8bjl6X4W41DYcD+d+jAFc82LXcQMUUzOqvgpBoFwIgXNzvSYPZP/DTF5QbPcMoF/NN0xc8+uPdYTQ+lvfpejA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1061210},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","shasum":"75b8d3db0f0ef72677d5acfe390653490182d99a","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"bun build ./src/cli/index.tsx --outdir ./bin --target bun --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts --outdir ./dist --target bun","typecheck":"tsc --noEmit","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run build","dashboard:build":"cd dashboard && bun run build","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"_integrity":"sha512-PAI4ykmslqSWFqkNSNr2ADACBirdDyuWlLuqil2phlthrKxgCjOCuJasxU/CyFvnLwSB6wrwqd9GHtcGEbGHmQ==","repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"10.8.3","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.2.5_1773755321514_0.45872883218659877","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@hasna/hooks","version":"0.2.6","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":"Hasna","license":"Apache-2.0","_id":"@hasna/hooks@0.2.6","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"f5b43e633a6c14b4f046e2c2a9a368bc88ea85e5","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.2.6.tgz","fileCount":175,"integrity":"sha512-oWZBcLRR04EUfWdws01BqC4yMnVvnTMXOyQd6223SdAwkFTv+T2wd27rhkSyhj50KRIYqPDBgC/dPGOnUBoD0Q==","signatures":[{"sig":"MEQCIE2TdysefLqwjPjR8Hj7C20dEFJURZJwbBgWwlT6QuvDAiBm5MHmE/GktdloVo/UICzH+7MMt/7nsJCaKlK8I4R31g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1071475},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","shasum":"f5b43e633a6c14b4f046e2c2a9a368bc88ea85e5","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"bun build ./src/cli/index.tsx --outdir ./bin --target bun --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts --outdir ./dist --target bun","typecheck":"tsc --noEmit","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run build","dashboard:build":"cd dashboard && bun run build","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"_integrity":"sha512-oWZBcLRR04EUfWdws01BqC4yMnVvnTMXOyQd6223SdAwkFTv+T2wd27rhkSyhj50KRIYqPDBgC/dPGOnUBoD0Q==","repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"10.8.3","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.2.6_1773814113102_0.41179169670174964","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"@hasna/hooks","version":"0.2.7","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.2.7","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"8ce7da79f2a4a5062ad89f6818036b9cb0bfe304","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.2.7.tgz","fileCount":177,"integrity":"sha512-Jzap0e5C1EwsexODsxu28lHh09gSzAFUHRPk4EEWL/x1Qbv1FHMdWayEx1PdzVqr4Pz8IY7EyrdHknOFCDFnJg==","signatures":[{"sig":"MEYCIQCVhVz6hF3jrtCpsSeHKciD6y8yND+SaGQFgISS8zpS4QIhAJ51BWG5CTfVmwuc8qTXxw3PUZdRw/maFHXq/cif/CA2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1091959},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"014f8912d673e3a14bddb854b9f992b37acd1987","scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"bun build ./src/cli/index.tsx --outdir ./bin --target bun --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts --outdir ./dist --target bun","typecheck":"tsc --noEmit","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run build","dashboard:build":"cd dashboard && bun run build","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"11.8.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"24.9.0","dependencies":{"ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.2.7_1773927856601_0.28156688816923303","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"@hasna/hooks","version":"0.2.8","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.2.8","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"9e0a9a957222f91fc3a3d864da8922e8b9cb9809","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.2.8.tgz","fileCount":217,"integrity":"sha512-MnXOSh3hzIvppVzlG0dHcWU1Oreev0N/fX8X/zWBe2NRHWK9MKZYQoIGBevq/uWFtIXEsh35ccAyrxPjd4CWPQ==","signatures":[{"sig":"MEUCIBLQWaku8qWwmsE268KB24x/ynUS/h9kVpp+QPUM1uXoAiEAjTmC8U9Y7bmIdASe4dDQ3pGg1h3IOvNUrtY0IRFYEE4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1236284},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"68e84d272424bb2fbb08023e1b2bbb1c6668f033","scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"bun build ./src/cli/index.tsx --outdir ./bin --target bun --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts --outdir ./dist --target bun","typecheck":"tsc --noEmit","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run build","dashboard:build":"cd dashboard && bun run build","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"11.8.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"24.9.0","dependencies":{"ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.2.8_1774019821765_0.7489232655872844","host":"s3://npm-registry-packages-npm-production"}},"0.2.9":{"name":"@hasna/hooks","version":"0.2.9","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.2.9","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"e959ed49fc57938542aa4d73ee51c6465c61c03a","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.2.9.tgz","fileCount":217,"integrity":"sha512-89JBaXArvJGHsxGrmp7nUSU+FPUEJ0tSsWV3dE3od0hHRggoUrhhyoNhSzrJDqe3uTB8Vq85JMMXIoQk3YDgyw==","signatures":[{"sig":"MEUCIAS99IjykltfpcvS6qMtcL99NHFRBKO9464soLBeGILVAiEAlnG4s+EHQ84Ql/IKB/VGbBbNvAm4TmEAFp3wJ5LOG3c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1236284},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"1c882402cf5a0c6d1c61eac1b67b06dcc8032e10","scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"bun build ./src/cli/index.tsx --outdir ./bin --target bun --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts --outdir ./dist --target bun","typecheck":"tsc --noEmit","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run build","dashboard:build":"cd dashboard && bun run build","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"11.8.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"24.9.0","dependencies":{"ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.2.9_1774263541363_0.11231472645898166","host":"s3://npm-registry-packages-npm-production"}},"0.2.10":{"name":"@hasna/hooks","version":"0.2.10","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.2.10","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"e501ed8032559a1fd06d99e85bace09ae8d21347","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.2.10.tgz","fileCount":217,"integrity":"sha512-54IgurY8kdIwXCC8I7qG62nQal4iCvS+dPtBmw8bAf+jjfaUvU10LOzRTADlUcLnbh/VXhQzJwUybYfW3MW3iQ==","signatures":[{"sig":"MEQCIAFsxyYDBDAq8ldS2k3od7EjKSuA39WwDxBgsWsE/kjhAiBhXDwovy+hJaM5f5y9Q2OobkTMcpYi6zD5ncZYa9T7lQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1532622},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"cc03ad5db3432f08a73b3292cc35f98c0be9a8b5","scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"bun build ./src/cli/index.tsx --outdir ./bin --target bun --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts --outdir ./dist --target bun","typecheck":"tsc --noEmit","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run build","dashboard:build":"cd dashboard && bun run build","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"11.8.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"24.9.0","dependencies":{"ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/cloud":"^0.1.0","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.2.10_1774277068646_0.8402045054794078","host":"s3://npm-registry-packages-npm-production"}},"0.2.11":{"name":"@hasna/hooks","version":"0.2.11","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.2.11","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"9259e5284340e15e4f12e2921794fa3bacf89a3c","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.2.11.tgz","fileCount":217,"integrity":"sha512-xIY9BPMo2O2VD0087CcLb8wNy27l2D6P71wlZ7fBrB4MWsiyC+mcdPLjyGQYSgUyqLV+gx6M+TcIH+aFY1qAig==","signatures":[{"sig":"MEUCIQD/mS6GMQ7upM9GnbutEEgnweFn5joXdbTBDAyu8alOdAIgF6lrpXdYtmGb6Cb3Pu1PJopZ6MvNqaBQjVzZ1VDbawY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1534610},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"16f731da341b506e81d71555e739b093ad8bfcb7","scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"bun build ./src/cli/index.tsx --outdir ./bin --target bun --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts --outdir ./dist --target bun","typecheck":"tsc --noEmit","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run build","dashboard:build":"cd dashboard && bun run build","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"11.8.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"24.9.0","dependencies":{"ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/cloud":"^0.1.0","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.2.11_1774278694965_0.8555637967218266","host":"s3://npm-registry-packages-npm-production"}},"0.2.12":{"name":"@hasna/hooks","version":"0.2.12","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.2.12","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"61249dda311936f5e4329a56ddf4135d2ec1fdf2","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.2.12.tgz","fileCount":217,"integrity":"sha512-eIHiSs669pGTCVeD/2RXCba1/vS96j69OAxW2XcZiscMrM3bs/W/ErUP8Tdbtq1HEaI84fszpU7I6ELm9WmQjg==","signatures":[{"sig":"MEUCIQCXfE5C1fj8o/AUCqP/QXzXMGp5ig7vLs2TQlSSInq+ggIgCl6F4SPoP8heVzG8VlwhvSt2NI60HgUcqhZ318v7GOY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1534688},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"ef84ea873f0b8dc059e1dbc59f03ee910cfd7eba","scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"bun build ./src/cli/index.tsx --outdir ./bin --target bun --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts --outdir ./dist --target bun","typecheck":"tsc --noEmit","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run build","dashboard:build":"cd dashboard && bun run build","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"11.8.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"24.9.0","dependencies":{"ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/cloud":"^0.1.0","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.2.12_1774279945036_0.3859741032103532","host":"s3://npm-registry-packages-npm-production"}},"0.2.13":{"name":"@hasna/hooks","version":"0.2.13","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":"Hasna","license":"Apache-2.0","_id":"@hasna/hooks@0.2.13","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"27c9a6061c3e573c4a8e4b0b46209112d93ef4ce","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.2.13.tgz","fileCount":217,"integrity":"sha512-9qqA45vNv75hpLsxSjLt9+bhSvcMxVnwiEI7fEsY7F1MOg1Ohnq1Aeg20LjeJ04O20TnlDducN4t0SVEMqCRGQ==","signatures":[{"sig":"MEQCIDzGGhAgMIvNtdil0HcADdTeYcbieUiHS4vroNYHe6bYAiBikmpsbjnKmy8cGRtruKa+xyYfLt4zGAbyhdSeilJB3Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1543641},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","shasum":"27c9a6061c3e573c4a8e4b0b46209112d93ef4ce","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"bun build ./src/cli/index.tsx --outdir ./bin --target bun --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts --outdir ./dist --target bun","typecheck":"tsc --noEmit","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run build","dashboard:build":"cd dashboard && bun run build","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"_integrity":"sha512-9qqA45vNv75hpLsxSjLt9+bhSvcMxVnwiEI7fEsY7F1MOg1Ohnq1Aeg20LjeJ04O20TnlDducN4t0SVEMqCRGQ==","repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"10.8.3","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/cloud":"^0.1.24","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.2.13_1779710286892_0.6768075799334068","host":"s3://npm-registry-packages-npm-production"}},"0.2.14":{"name":"@hasna/hooks","version":"0.2.14","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.2.14","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"473698720fa27adcacf793053f5e974e34a5adab","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.2.14.tgz","fileCount":217,"integrity":"sha512-tvYg1EByZTlB9Qnfbv28ErD9jyFp79vhy6YStpLJDAqdZZuAYAy1a1ivz4wuINvqePsVdqkFGbj5qUVB88Xoag==","signatures":[{"sig":"MEUCIB04HFpEZcgcLdBkmS4CVXkp/xiSvBcV6ej/yHf8Lv6wAiEAj/zA3NwKRGL7KCqh8LbuyYvj0uLCS5/B7Kp6GGRjBWA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1546227},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"f3ca949e9f831ab6fc3b07681fedbc52c7d68323","scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"bun build ./src/cli/index.tsx --outdir ./bin --target bun --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts --outdir ./dist --target bun","typecheck":"tsc --noEmit","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run build","dashboard:build":"cd dashboard && bun run build","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"10.9.7","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/cloud":"^0.1.24","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.2.14_1779973864280_0.6875376575592802","host":"s3://npm-registry-packages-npm-production"}},"0.2.15":{"name":"@hasna/hooks","version":"0.2.15","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.2.15","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"c56bfd4c8c8b0bc2c490c74be5174e21113d30f3","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.2.15.tgz","fileCount":217,"integrity":"sha512-lHG5kOmLgnbz/Zi/GGuZC3GV12EhkYq7XFih9bljRRxr+m1kY4TSIC9sGkD1TQWIqOmRIUEpIknLM2YjI81cQw==","signatures":[{"sig":"MEUCIGcV3ogiEkqM/g69LJ+xVEc2HFLTAn3ftr9FDv/4JVjGAiEAnAwXT/Zw/IHqZLykiFhFo42saXgo4kl1l8untAbpmdM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1546378},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"616194f1f5b923f0eaa7891981a4eaa6b898a571","scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"bun build ./src/cli/index.tsx --outdir ./bin --target bun --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts --outdir ./dist --target bun","typecheck":"tsc --noEmit","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run build","dashboard:build":"cd dashboard && bun run build","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"10.9.7","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/cloud":"^0.1.24","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.2.15_1779975163301_0.007225951635702721","host":"s3://npm-registry-packages-npm-production"}},"0.2.16":{"name":"@hasna/hooks","version":"0.2.16","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.2.16","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"33c4907226b4f5f4571975f69603594a34d487bf","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.2.16.tgz","fileCount":215,"integrity":"sha512-Z9mzJyQ43YxbQg5nokN0W2/cDlFMr+SNHVxiP5kIQN9dzsFCy/wC6aagC3lBBx0+2n8Cz0934KrjTXBE56fMdA==","signatures":[{"sig":"MEQCIDetnvyFjtX+zjewkfnmm4C1pRnS0pMnvRxsCsOKQqu2AiBbTK7L/9ylhopSGhXgDNXe0Kc79deYD+FGNP5jTLHGlg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1222717},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"b015f30514ced4e10499ff6a1b485e5f133175f8","scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"bun build ./src/cli/index.tsx --outdir ./bin --target bun --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts --outdir ./dist --target bun","typecheck":"tsc --noEmit","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run build","dashboard:build":"cd dashboard && bun run build","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"10.9.7","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.2.16_1780856160809_0.08541519235794182","host":"s3://npm-registry-packages-npm-production"}},"0.2.17":{"name":"@hasna/hooks","version":"0.2.17","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.2.17","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"bb78aea56210edfade89632ceb6d2be9b82722a7","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.2.17.tgz","fileCount":215,"integrity":"sha512-vsyJ43aXRTymR3tIL4Gbu7jzXTw5phnchgZCC4cTcsGr3yDj7AVLCszn0lwORaIy4ZXoTR/ncq0ZNoo3KcX2gw==","signatures":[{"sig":"MEUCIQCrPDlOQ0yvqSvkKzMzlYn2i5AbVNnoZ6fogq9kEZ9VegIgLcI+wNmZdnekBmilQujfySaSKZQwg10CJQWTI1mKE1k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1569331},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"bun build ./src/cli/index.tsx --outdir ./bin --target bun --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts --outdir ./dist --target bun","typecheck":"tsc --noEmit","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run build","dashboard:build":"cd dashboard && bun run build","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"10.9.7","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/cloud":"0.1.24","@hasna/events":"^0.1.6","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.2.17_1781607072123_0.13521320414901572","host":"s3://npm-registry-packages-npm-production"}},"0.2.18":{"name":"@hasna/hooks","version":"0.2.18","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.2.18","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"b18e71b42b7328429862e7b355b1f2c65f7c5ae5","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.2.18.tgz","fileCount":215,"integrity":"sha512-wA9lY7MmRTOwvpNLku9YzFazoiYK3g52DtCjp6/JREDpUqC5AXC+sBigBtESby0fpbr/vImXvIlobwy9xJaOyw==","signatures":[{"sig":"MEYCIQD5++8CRLseF9NboXIQaUaGESV/vmZjHSp4jzy0NIVeeQIhAJkmUTYIVNHqJUfQM+LcdcU9enRLzt9D2Zy9NuXt/90u","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1569331},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"bun build ./src/cli/index.tsx --outdir ./bin --target bun --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts --outdir ./dist --target bun","typecheck":"tsc --noEmit","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run build","dashboard:build":"cd dashboard && bun run build","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"10.9.7","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/cloud":"0.1.24","@hasna/events":"^0.1.6","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.2.18_1781608149180_0.11197436562615759","host":"s3://npm-registry-packages-npm-production"}},"0.2.19":{"name":"@hasna/hooks","version":"0.2.19","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":"Hasna","license":"Apache-2.0","_id":"@hasna/hooks@0.2.19","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"e59135645824e4f0e522dd5b966288fec7db8d76","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.2.19.tgz","fileCount":217,"integrity":"sha512-mwekZQPe/Adrf6/u3gSXwEyNIqi62Qs7ArebQY6F/uQLKGG4i4NnFLYmcPBaAUJCzJRDos14Iote85DJa2H3Iw==","signatures":[{"sig":"MEQCIBvagzDpMydH43NtfoMajNLVx1GEVU3wHU0k+TMGYD73AiA7oP1O8PhFMdnroduh90bQyfKWRseter3LzyUvNRbAeA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1575247},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","shasum":"e59135645824e4f0e522dd5b966288fec7db8d76","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"bun build ./src/cli/index.tsx --outdir ./bin --target bun --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts --outdir ./dist --target bun","typecheck":"bunx tsc --noEmit","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run build","dashboard:build":"cd dashboard && bun run build","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"_integrity":"sha512-mwekZQPe/Adrf6/u3gSXwEyNIqi62Qs7ArebQY6F/uQLKGG4i4NnFLYmcPBaAUJCzJRDos14Iote85DJa2H3Iw==","repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"10.8.3","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/cloud":"0.1.24","@hasna/events":"^0.1.6","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.2.19_1782584561061_0.7464789740986606","host":"s3://npm-registry-packages-npm-production"}},"0.2.20":{"name":"@hasna/hooks","version":"0.2.20","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.2.20","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"59202de19d7c51065132f14d18a82909867137a4","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.2.20.tgz","fileCount":237,"integrity":"sha512-j5J5LStXrOv4Cl9J3nH56jnwSjgCXJ700FwNTMoziBBWyHU9H9XMNHXUPbO4rpwhZoa/etqR17udxjO/lROCCg==","signatures":[{"sig":"MEUCIA2euVB7eBFUmi2LuziCRYDzU1QGTUjM/DaBgWz0sclCAiEAlFrHqKffasKKAkWn4cwa/dkoSWWpWMyO3Izn3H0piWM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1266276},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"ae80ffd9dfa9b5c6ef8e98d18daea7a6393492e2","scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf ./bin ./dist && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts --outdir ./dist --target bun && bunx tsc -p tsconfig.build.json --emitDeclarationOnly","typecheck":"bunx tsc --noEmit","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run build","dashboard:build":"cd dashboard && bun run build","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"10.9.7","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.6","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.2.20_1782710985849_0.4610864824178109","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@hasna/hooks","version":"0.3.0","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.3.0","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"95d6cb6f6b3e068e12f6ba0d13a6b500d7b3eb56","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.3.0.tgz","fileCount":267,"integrity":"sha512-tIaBUoK8zymnMviZDRmW8k7tfybZlWmztR4P6NcDwSZ5nwN2kNEVw42PKTRd+ph7fGNuD6xgRhvsK0Qt5/dM1w==","signatures":[{"sig":"MEUCIQD3UfOaEPwrNJI8pxwi4hpGLc0tBP5lwLkU/OigtHZs8QIgcjkp2wJ5tziyDfPSB7OzaNEZK9x5uBF3rhf8vXnrtpQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1492007},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run validate:package","dashboard:build":"cd dashboard && bun run build","validate:package":"bun run build && bun scripts/validate-package.ts","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"11.18.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"22.22.3","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.6","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.3.0_1783608936184_0.36677158894642825","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@hasna/hooks","version":"0.3.1","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.3.1","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"c802978ee37482a578361105207d71570151a6b8","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.3.1.tgz","fileCount":272,"integrity":"sha512-8TccflZtxOtSWPP/sUtWEkQGlR4SJ9vfbOfDkJTcz9gxp+XgYPfw127J1eRcFrTIZEtBNW4vPfIiNdO0QQGCww==","signatures":[{"sig":"MEYCIQCaiWRa1pIVxkggiJVLyjZp/nQx7iYfsxesSgcsVvq0zAIhAKFg9C3SoDiiEUnIK370jdbjxRqbo2Zfgqc1fhszotK1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1515494},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run validate:package","dashboard:build":"cd dashboard && bun run build","validate:package":"bun run build && bun scripts/validate-package.ts","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"11.18.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"22.22.3","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.6","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.3.1_1783609229756_0.15123466928803397","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@hasna/hooks","version":"0.3.2","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.3.2","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"3a5525428c3201ea7e814a256da8f3198807f38c","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.3.2.tgz","fileCount":272,"integrity":"sha512-BDssX5s8ttgRUSO2wjQd+S5wunbBPVvNK1EpuKQJ2kaI5oo/L9VzNN8aqFd0bTFkPu935nEj2w3bLr1piC3JGA==","signatures":[{"sig":"MEYCIQCkEWYA4LG6DcDqmHyNcK0/uTahcNLK91CCBXCbT511lQIhAJP4OB04U5bry4o+2On4iT1BqetPhxxMvK4VLNsjsLx2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1515715},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run validate:package","dashboard:build":"cd dashboard && bun run build","validate:package":"bun run build && bun scripts/validate-package.ts","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"11.18.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"22.22.3","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.6","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.3.2_1783610224882_0.3016030854448255","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"@hasna/hooks","version":"0.3.3","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.3.3","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"1dac93af55615eea0df014a929955727e893c367","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.3.3.tgz","fileCount":272,"integrity":"sha512-RIBqFWU71HlWl3KeGs69DxBZOT5+77+g0JBF7yxHk9Hu4h/hZCDAtwqoPCY49/ZpPsL85lRyKGQZcPitK33BVA==","signatures":[{"sig":"MEYCIQDi9kInCcIRkW4Ekvstwss976evKZho5qKFOY7CdqZ3WgIhAK5NmgrwF81tMQp1AbBufbN5chcH7iKW/nlBZbeVo7bT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1517689},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run validate:package","dashboard:build":"cd dashboard && bun run build","validate:package":"bun run build && bun scripts/validate-package.ts","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"11.18.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"22.22.3","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.6","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.3.3_1783622274770_0.9191518987011138","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"@hasna/hooks","version":"0.3.4","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.3.4","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"8ef747ae7a8401b52a53888b01c783b24563bba8","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.3.4.tgz","fileCount":272,"integrity":"sha512-uxAuazP0n69AsT7hEHb4I4P2vGYcOMmHnhxjyZxsbFb1ZLmP6zU6RVc5BhP0G+Yb+4t4EFkSOVkrByiIDyTvHA==","signatures":[{"sig":"MEUCIQCnw3DiD+VZp+UIOMyk890X2ECmXTfCCcm/+Cm8UqKaEwIgS+ejdZZlmaOvEYXlDskbrjXANHxIz8GC+3jGRMATqVI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1517819},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run validate:package","dashboard:build":"cd dashboard && bun run build","validate:package":"bun run build && bun scripts/validate-package.ts","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"11.18.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"22.22.3","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.6","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.3.4_1783622665442_0.8062466416096266","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"@hasna/hooks","version":"0.3.5","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.3.5","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"9610df63e438712607c80a99ccded9e81286d4da","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.3.5.tgz","fileCount":272,"integrity":"sha512-n3olWxJWexAhmSBynUNqeu8EBEbiCMDRVDYNzAGJoMxpRROYdz3/0x5IN+Nl7NEmRh+wi11yYBgbvrKNNHR5lw==","signatures":[{"sig":"MEYCIQCNb0DmP8jcky4LiHDgW/E0g9n61MBhbdEPGl3YK7eSSgIhAJDvgVGICuG36Yy53AIqRfuOs20u8e+Ci69UbYXVk8ba","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1517818},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run validate:package","dashboard:build":"cd dashboard && bun run build","validate:package":"bun run build && bun scripts/validate-package.ts","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"11.18.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"22.22.3","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.6","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.3.5_1783622842412_0.505875834981061","host":"s3://npm-registry-packages-npm-production"}},"0.3.6":{"name":"@hasna/hooks","version":"0.3.6","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.3.6","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"dd106c9f685256b8f6365c685f3257535555a79c","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.3.6.tgz","fileCount":272,"integrity":"sha512-m5LzqWLLmmKBf08KKpLQpDnArIdN2/lZMLWda1px1pY5h9mpT84akb7rYtbugBDyZ1+p+yQaxgRFkb6leZlAuQ==","signatures":[{"sig":"MEYCIQD3bXri+K6HmDT2w39wh/DC8YwDcLSBFTUHkO7TgUW38QIhAJP6MMIw4F+bBZAGyfVsXeIC3Nopuxz92pfG9k5303Y+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1526553},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run validate:package","dashboard:build":"cd dashboard && bun run build","validate:package":"bun run build && bun scripts/validate-package.ts","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"11.18.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"22.22.3","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.6","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.3.6_1783625296480_0.48205557762838325","host":"s3://npm-registry-packages-npm-production"}},"0.3.7":{"name":"@hasna/hooks","version":"0.3.7","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.3.7","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"1956553209acd4bc2dd780c918f98e7e9992c4a0","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.3.7.tgz","fileCount":272,"integrity":"sha512-+tvGe/S+jyXxqrMhUxD42Z8kiWAdJKUV/o/btj1vPUVBtVuG56Ug2FRON5yM6QlOvUaWdfKpPqqgRKgohhtWsw==","signatures":[{"sig":"MEYCIQCSAGjZqFIVfZQLnmsJSKhGarwZvm7flAUXrLzx+KI07wIhAOTjKSCbfcCjtaVlR8Gd5AX2MO/zR9lsDyZxa+c7mvgP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1531426},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run validate:package","dashboard:build":"cd dashboard && bun run build","validate:package":"bun run build && bun scripts/validate-package.ts","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"11.18.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"22.22.3","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.6","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.3.7_1783625794808_0.49663415788302423","host":"s3://npm-registry-packages-npm-production"}},"0.3.8":{"name":"@hasna/hooks","version":"0.3.8","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":"Hasna","license":"Apache-2.0","_id":"@hasna/hooks@0.3.8","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"14e524a7ef7f98485c366955f3d471d202ec6977","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.3.8.tgz","fileCount":270,"integrity":"sha512-mLRvLsq2QyxOgFj58EWgY7onW2aGHvhDCh8fc9quFx7pKczogP70E++5GEYYq6I0kY2qQ4f30wwCeFqfcLoc0A==","signatures":[{"sig":"MEYCIQClWJYO+pgglaBQOlrtrDE3sldCa+RPLV8KgNYA8uAmCQIhAM4JxpJ4+0bn1XUavQwnPsbYV/ADQHQavC8WTdBuJhV6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1529657},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","shasum":"14e524a7ef7f98485c366955f3d471d202ec6977","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run validate:package","dashboard:build":"cd dashboard && bun run build","validate:package":"bun run build && bun scripts/validate-package.ts","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"_integrity":"sha512-mLRvLsq2QyxOgFj58EWgY7onW2aGHvhDCh8fc9quFx7pKczogP70E++5GEYYq6I0kY2qQ4f30wwCeFqfcLoc0A==","repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"10.8.3","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"24.3.0","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.6","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.3.8_1783672532992_0.27824152723629436","host":"s3://npm-registry-packages-npm-production"}},"0.3.9":{"name":"@hasna/hooks","version":"0.3.9","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":"Hasna","license":"Apache-2.0","_id":"@hasna/hooks@0.3.9","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"585c8b4a0e1c9826ed9467a12762a9db56d2a129","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.3.9.tgz","fileCount":270,"integrity":"sha512-jQ3U7aG316sr7uapS4o9IuSgFTGBnf+1kx7RBlv4iCLwT6BnA69vpxYei72bJ1FOdC98lo+NTBmKD86WsDd5ig==","signatures":[{"sig":"MEUCIQC/TSJ6klX9YUkBSTS5LR3xM8tVbNMxhQrslPI/ZnERUwIgUtoIBnYZwZdPLDSbDFEmzP9qoyL+valh9kBRD6zHZpY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1548770},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","shasum":"585c8b4a0e1c9826ed9467a12762a9db56d2a129","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run validate:package","dashboard:build":"cd dashboard && bun run build","validate:package":"bun run build && bun scripts/validate-package.ts","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"_integrity":"sha512-jQ3U7aG316sr7uapS4o9IuSgFTGBnf+1kx7RBlv4iCLwT6BnA69vpxYei72bJ1FOdC98lo+NTBmKD86WsDd5ig==","repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"10.8.3","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"24.3.0","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.6","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.3.9_1783944014520_0.9073872709015844","host":"s3://npm-registry-packages-npm-production"}},"0.3.10":{"name":"@hasna/hooks","version":"0.3.10","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":"Hasna","license":"Apache-2.0","_id":"@hasna/hooks@0.3.10","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"ad54a91897b1a248a5d79af4cf02ef0e52c30d2e","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.3.10.tgz","fileCount":270,"integrity":"sha512-Ka/SjwgCjhghGJA6iYPfVMZwkvIc2yJdUC4EM0i6sylbE4Lt58oyLkV791I9m+3goxInvA3asW2+OLoJMWVEMQ==","signatures":[{"sig":"MEYCIQDz+92b0PaNRqkgL8So8fqelsSe1TvZtoMWueYmIt3DmgIhALMYTUF37Gg8q+KgClt3VDkTia+PD43kDOknhdb5wP3i","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1548779},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","shasum":"ad54a91897b1a248a5d79af4cf02ef0e52c30d2e","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run validate:package","dashboard:build":"cd dashboard && bun run build","validate:package":"bun run build && bun scripts/validate-package.ts","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"_integrity":"sha512-Ka/SjwgCjhghGJA6iYPfVMZwkvIc2yJdUC4EM0i6sylbE4Lt58oyLkV791I9m+3goxInvA3asW2+OLoJMWVEMQ==","repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"10.8.3","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"24.3.0","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.6","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.3.10_1783945133571_0.5171120966948284","host":"s3://npm-registry-packages-npm-production"}},"0.3.11":{"name":"@hasna/hooks","version":"0.3.11","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":"Hasna","license":"Apache-2.0","_id":"@hasna/hooks@0.3.11","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"cebf051ada18c31842ba4b5f7a79f20ae0387702","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.3.11.tgz","fileCount":270,"integrity":"sha512-rpk2vUmnW4I+9Hb1xEFgw2ePPc6OsdTU1eIFvNLoiLw7/M52ilkEb57RYJKfkdFr1kmQHqDa5xdctxYTuwqfnw==","signatures":[{"sig":"MEQCIBvbbMM6Yyc9sKJXsj+P0alj+KFRhRrs/XQC5NLfIJCFAiA0NRVxicyrbKKmB5fe/IJD2THCdZoJVzllssWcugQ11w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1567905},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","shasum":"cebf051ada18c31842ba4b5f7a79f20ae0387702","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run validate:package","dashboard:build":"cd dashboard && bun run build","validate:package":"bun run build && bun scripts/validate-package.ts","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"_integrity":"sha512-rpk2vUmnW4I+9Hb1xEFgw2ePPc6OsdTU1eIFvNLoiLw7/M52ilkEb57RYJKfkdFr1kmQHqDa5xdctxYTuwqfnw==","repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"10.8.3","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"24.3.0","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.6","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.3.11_1784544843486_0.510893821487703","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@hasna/hooks","version":"0.4.0","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.4.0","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"e97f7c89dc59adcafa11e82a5e6b8941f918ba13","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.4.0.tgz","fileCount":270,"integrity":"sha512-OnlBroEsqARMVOIOzUpQzsXTxkcVCavQ1XSdX4oChW++3EaqaVtR2C219+ZsPvxbuOFuLuS7B7z9vpxc2qNt0g==","signatures":[{"sig":"MEQCIAHlQd6FnAkRU76bRR+C5RR6xivvlBk22GJpPguIrPJQAiBQxnhEl+v5Fanm7Kjs7uQbsZResRrwo/KXruYMLKcUvg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1593674},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run validate:package","dashboard:build":"cd dashboard && bun run build","validate:package":"bun run build && bun scripts/validate-package.ts","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"11.18.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"22.22.3","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.6","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.4.0_1784905886049_0.3205934298868722","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@hasna/hooks","version":"0.4.1","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":"Hasna","license":"Apache-2.0","_id":"@hasna/hooks@0.4.1","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"e810ce8f778dc7d499d55a3c5afa785a2abf59f2","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.4.1.tgz","fileCount":270,"integrity":"sha512-Jk2eIWaOqiClstttYfSIsJMpEUqH20HGXs2U+f2PMxFr2inkKl80UajHq6QBgW+gcA5RwgmFX+qJpxuRRF/oIg==","signatures":[{"sig":"MEUCIBkAqMmTF8EgGue4KWcOimJwuKiquQ1MsIayRlnx8Ae1AiEAo/7OVdreX3G6z5tNlplfEUCLOozvyDMrO1BTSGSFU1o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1624890},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","shasum":"e810ce8f778dc7d499d55a3c5afa785a2abf59f2","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run validate:package","dashboard:build":"cd dashboard && bun run build","validate:package":"bun run build && bun scripts/validate-package.ts","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"_integrity":"sha512-Jk2eIWaOqiClstttYfSIsJMpEUqH20HGXs2U+f2PMxFr2inkKl80UajHq6QBgW+gcA5RwgmFX+qJpxuRRF/oIg==","repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"10.8.3","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"24.3.0","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.6","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.4.1_1785077094304_0.1840860356118652","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@hasna/hooks","version":"0.5.0","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.5.0","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js"},"dist":{"shasum":"5f3a21629f7ccd03ef0d0985418ff633e54dbe73","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.5.0.tgz","fileCount":270,"integrity":"sha512-VDGHNhZWJ2/3BohBa3KZhJCM3Sa3G+muDPsJQeBPmSFOIJ/ef1MsWHQ8Becbrca0ELBz+waKShltLe2T4GR0JQ==","signatures":[{"sig":"MEUCIClFhDyJpxgdNLIrHdObNYIRbr2xsKyKmU+ekmH42wHwAiEAiifylVCnCalzJhbGXJ2xYouFnF4hNKvDd+fAvIQPqx8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1780087},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run validate:package","dashboard:build":"cd dashboard && bun run build","validate:package":"bun run build && bun scripts/validate-package.ts","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"11.18.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"22.22.3","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.6","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.5.0_1785137686659_0.5595374127480295","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@hasna/hooks","version":"0.6.0","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.6.0","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"d86e3ee65b5b761970f9e0af051b445b0db1887a","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.6.0.tgz","fileCount":291,"integrity":"sha512-0Qj5ZIadNXQ5CFXjaXPLKdn7u/nEtOC+k9loBF+z/Lay2r2eVIdaMJETJu0YzTEdIAKQuvZnph5CzkqjIpT/HQ==","signatures":[{"sig":"MEQCIE4UTL4fdKTiNtnKqOsqdshLoxKBarSdYmxM7rfXeqzSAiB4oMBxIu+MYVF10mp02/fA9aWX3Yb0bSBIVdexo3/Xdg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2299531},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run validate:package","dashboard:build":"cd dashboard && bun run build","validate:package":"bun run build && bun scripts/validate-package.ts","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"10.9.8","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"22.22.3","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.6","@hasna/secrets":"^0.2.22","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.6.0_1786714012185_0.9088341577540098","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@hasna/hooks","version":"0.6.1","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.6.1","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"38e90f4051ef94dca5f0db3792bb6929a2226811","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.6.1.tgz","fileCount":296,"integrity":"sha512-bQcR5+vo08GaiTB7FNrY2Z3u2l+tVMiEaG9whEC4BjE15uFafNQD4LezRg/PoJN2biPtoU+DFUz2Ng7KOingLw==","signatures":[{"sig":"MEQCIDqsEmpDhoo7aSlWNchZS7Ouy5+RvrWza8fm6hbsZSAQAiAQWaklAxf1+DtPbV1NdEAQ5UBi3TIhZooLzcJEprNXXw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2332300},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run validate:package","dashboard:build":"cd dashboard && bun run build","validate:package":"bun run build && bun scripts/validate-package.ts","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"10.9.8","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"22.22.3","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.6","@hasna/secrets":"^0.2.22","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.6.1_1786715496942_0.06338599970018977","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"@hasna/hooks","version":"0.6.2","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.6.2","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"bf59e03158406c33b4e83892eb4b73132b83d8a5","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.6.2.tgz","fileCount":297,"integrity":"sha512-xGIH0zibYUImQHSQbv4vn0aYz4pg7JplKIwEA4MkX39vmfsIlhMUeFdoFSOtyTwmcvCsJQ5nnwdbCg0Y9Dhnpg==","signatures":[{"sig":"MEYCIQDCvkTcZ350sV51gBmnzw3vCJzf+6H3BNzevNh183aGzwIhAI92I+VtPBFvcUTMG+BwZ51Quh50MHZ40kDIRwO9cscU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2336185},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run validate:package","dashboard:build":"cd dashboard && bun run build","validate:package":"bun run build && bun scripts/validate-package.ts","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"10.9.8","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"22.22.3","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.6","@hasna/secrets":"^0.2.22","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.6.2_1786720025438_0.6415116226145698","host":"s3://npm-registry-packages-npm-production"}},"0.6.3":{"name":"@hasna/hooks","version":"0.6.3","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.6.3","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"c02983deec049c965811c4fff289c623bc040184","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.6.3.tgz","fileCount":297,"integrity":"sha512-uAiwqgp3LBrKd0s7jyRWx0dfwdh3wIPQphm/BhiO2jSkRcqP9aPhCk8xdjw+dv7+qjqwWoS7Bf5vRThP/u8F+g==","signatures":[{"sig":"MEQCIFwWU2KTSNfZnAZ4hSaC0DwFSF9LPJHjQK8WnsaQHY6sAiBii0hDfwjCt6dDXUxP9fO058b1+U6wBaOmFebVZlFe5w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2339461},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"gitHead":"459e4b448cf18b70e9eb0f2c94237d5ce753907f","scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run validate:package","dashboard:build":"cd dashboard && bun run build","validate:package":"bun run build && bun scripts/validate-package.ts","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"10.9.8","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"22.22.3","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.6","@hasna/secrets":"^0.2.22","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.6.3_1786723630653_0.30706357549764984","host":"s3://npm-registry-packages-npm-production"}},"0.6.4":{"name":"@hasna/hooks","version":"0.6.4","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.6.4","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"afbefc7a12303518fe8da1b4424c7ff76bc75883","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.6.4.tgz","fileCount":299,"integrity":"sha512-vUfHG4RWpCjlcHeSI074kOkublcSj5oq7kVY2hzybop9UonlPtAjVkh0nOTLRbZvkD9ROzVlFs2PrpzoyAYj+w==","signatures":[{"sig":"MEUCIQD3Z6ztlLPX0fEqpCUycGSAS1zXexFBD0Bn5KEdbTGoMAIgGGHQ/mmbLyEk89Cbmb5szTiD9MvvhgEn19yrSgxAVGk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2393073},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run validate:package","dashboard:build":"cd dashboard && bun run build","validate:package":"bun run build && bun scripts/validate-package.ts","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"10.9.8","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"22.22.3","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.6","@hasna/secrets":"^0.2.22","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.6.4_1786786246943_0.8635787027966129","host":"s3://npm-registry-packages-npm-production"}},"0.6.5":{"name":"@hasna/hooks","version":"0.6.5","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.6.5","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"77a6fbe85701b8359b9f5b2e9ef112e3fe0ae461","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.6.5.tgz","fileCount":299,"integrity":"sha512-zFv/oRkxXnZsJQrFN0qFGpVgVnXtkCtgEZhjioc0tFw57CdQt/GzrfGtzJNuQrZ+THkm2237iseL/nG8CtoUxg==","signatures":[{"sig":"MEUCIQCwhQOvtOFwhnr6gkZgLm4m+b7bhQ18EeoOwoTVtlR2WQIgCwXgGwQy0dLPRfYMfr3VHLVCw3Y/Lw+SH4gdVD6UShg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2395255},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run validate:package","dashboard:build":"cd dashboard && bun run build","validate:package":"bun run build && bun scripts/validate-package.ts","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"10.9.8","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"22.22.3","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.6","@hasna/secrets":"^0.2.22","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.6.5_1786790225346_0.17474082232496557","host":"s3://npm-registry-packages-npm-production"}},"0.6.6":{"name":"@hasna/hooks","version":"0.6.6","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.6.6","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"5d69f39ed046908fc8378e8d7e45b1eac48591e2","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.6.6.tgz","fileCount":302,"integrity":"sha512-SypfgEvcQBkWVvhIHrKnk5I/7au0fWxdbAQWxo0bcdzJmKPLrTtvWdZhm0IrSneh7c+EEkzKd3UtFoXTBroVyQ==","signatures":[{"sig":"MEUCIQCWxFmTtzMi/k9JF5PROGTnu4DT2eJaQHENdKY/r7pMeAIgBJIjgo84+5EX5f1S4XGXFXfLKZH6/jmHa5uQLCDsB38=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2440986},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run validate:package","dashboard:build":"cd dashboard && bun run build","validate:package":"bun run build && bun scripts/validate-package.ts","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"10.9.8","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"22.22.3","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.6","@hasna/secrets":"0.3.0","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.6.6_1786813750663_0.6773617655058259","host":"s3://npm-registry-packages-npm-production"}},"0.6.8":{"name":"@hasna/hooks","version":"0.6.8","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.6.8","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"b674be75a26ef27fd5feb96d9200cfe35f882678","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.6.8.tgz","fileCount":302,"integrity":"sha512-JM1ul4PTZRkxdvLsMn8QWRZb6Bk1s+w9ty8WOOZ1XyNJhdrrvxAb18WenJ6OOSeJwbZOPSteUk8+jbKhZbiQyQ==","signatures":[{"sig":"MEQCIGM8Fdtj8G7/fRv+8tK/m5P/PHU50/S7Jw1yxQF+ofl4AiA9Z2L6ssmq/d1HMD9hX4HeaMfIdyOnC4RzECUlJJR8hA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2454371},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","prepublishOnly":"bun run validate:package","dashboard:build":"cd dashboard && bun run build","validate:package":"bun run build && bun scripts/validate-package.ts","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"10.9.8","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"22.22.3","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.6","@hasna/secrets":"0.3.0","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.6.8_1786818949304_0.5467855924742451","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@hasna/hooks","version":"0.7.0","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.7.0","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"42a4c65d08b1d797d58bdc0ac4f773a598d6ee6b","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.7.0.tgz","fileCount":308,"integrity":"sha512-r/tqucXj6pK5PgMsUxc3VmD1JZnVXD6G3KSx7GhULJN+0pNP49sisx74jTn/RHsxe29KVLFNZ8jz9o34oUkT6A==","signatures":[{"sig":"MEUCIFF9lblf9EvBmpWB5LGsRNupQtYkpeACLzNiH6ORwY9NAiEAyeq43WW6ZKscsZPd3YpuIy+9n1oGrPyqK0rOLs7mw+Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2528502},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","prepack":"bun run build && bun run scan:artifact","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","scan:artifact":"bun scripts/artifact-scan.ts","prepublishOnly":"bun run validate:package","dashboard:build":"cd dashboard && bun run build","validate:package":"bun run build && bun scripts/validate-package.ts","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"11.18.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"22.22.3","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.16","@hasna/secrets":"0.3.3","ink-text-input":"^6.0.0","@hasna/contracts":"0.13.1","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0","@hasna/contracts":"0.13.1"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.7.0_1787290115683_0.7221912897646598","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"@hasna/hooks","version":"0.7.2","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.7.2","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"bd57adbde663c63501c57e814456b7cb004dcfb1","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.7.2.tgz","fileCount":308,"integrity":"sha512-nw7LZm28QMDZlfLmd/1qad98FnlvhDDqMJYRf5bVfGWcztv9qCYfKyaqaIVYzIrKlsIhEZh/mZDOg/ZW6wB51Q==","signatures":[{"sig":"MEQCIGpMMMu4pZqkM8FpEg1NzxlpjmpVTonMs+Yw3KK+YwruAiA8/m1ntdGGpkCophG5PwDU6wVgaLOhq91V9aHGZB2Mkw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2531414},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","prepack":"bun run build && bun run scan:artifact","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","scan:artifact":"bun scripts/artifact-scan.ts","prepublishOnly":"bun run validate:package","dashboard:build":"cd dashboard && bun run build","validate:package":"bun run build && bun scripts/validate-package.ts","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"11.18.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"22.22.3","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.16","@hasna/secrets":"0.3.4","ink-text-input":"^6.0.0","@hasna/contracts":"0.13.3","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0","@hasna/contracts":"0.13.3"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.7.2_1787382128757_0.31165993161357863","host":"s3://npm-registry-packages-npm-production"}},"0.7.3":{"name":"@hasna/hooks","version":"0.7.3","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.7.3","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"b402e9a5260e3e6478754d3081f9cb5a1e842933","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.7.3.tgz","fileCount":308,"integrity":"sha512-/jz6bAtWi/R6AobpcxAUxfwYBzNylfMAhrS1/mHgrG0f87lJhWCSgoH5xmIlHClIUir7T32izlMQnY/dlPK2qg==","signatures":[{"sig":"MEQCICGcg2/Xtz5k8FM5ydUxoe2XvH7bRMd0VgAN/1/QuFqzAiB2fJKnbnAJhkdMycsl15w/X79QErZN2RcAbZTH+scvVQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2531897},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","prepack":"bun run build && bun run scan:artifact","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","scan:artifact":"bun scripts/artifact-scan.ts","prepublishOnly":"bun run validate:package","dashboard:build":"cd dashboard && bun run build","validate:package":"bun run build && bun scripts/validate-package.ts","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"11.18.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"22.22.3","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.16","@hasna/secrets":"0.3.4","ink-text-input":"^6.0.0","@hasna/contracts":"0.13.4","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0","@hasna/contracts":"0.13.4"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.7.3_1787442190909_0.2363269835443027","host":"s3://npm-registry-packages-npm-production"}},"0.7.4":{"name":"@hasna/hooks","version":"0.7.4","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.7.4","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"7f4e648b4172befcd39d0f88333767bbb6395ed1","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.7.4.tgz","fileCount":308,"integrity":"sha512-v0qsK8GxG805w4rfr78hsS0iVhvskjS0NFG088YeIpFy2uIcSzeSKs2EhWIq+2aWJFUZSwGYEkompQmFKBnr1A==","signatures":[{"sig":"MEYCIQDdZOmd/u4DIMusnmmoV98zUZdAXY+JmO1xBRX2haC++AIhANeZpZCFit/NJuQiYK8zxFOA8ifwWbB7JnOUGv1povJi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2531897},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","prepack":"bun run build && bun run scan:artifact","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","scan:artifact":"bun scripts/artifact-scan.ts","prepublishOnly":"bun run validate:package","dashboard:build":"cd dashboard && bun run build","validate:package":"bun run build && bun scripts/validate-package.ts","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"11.18.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"22.22.3","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.16","@hasna/secrets":"0.3.5","ink-text-input":"^6.0.0","@hasna/contracts":"0.13.4","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0","@hasna/contracts":"0.13.4"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.7.4_1787454230763_0.7711838840165111","host":"s3://npm-registry-packages-npm-production"}},"0.7.5":{"name":"@hasna/hooks","version":"0.7.5","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.7.5","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"d980839bb85a2c6d294a4468bf1bcfdcfaf2414f","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.7.5.tgz","fileCount":308,"integrity":"sha512-nZ+FQozQQCTHIk8DpEAOpgRbkR/hLXlSIBGWAS7mhkhvLgZn+5nlIaGuDaMBkjgc8XK7ydJO0Dmf45Eti9LgFA==","signatures":[{"sig":"MEUCIH0dAvs5B25fg4wm8dnXhY9fmTS3/bRfdZ053mxBtgZKAiEAz6XIZrJYXc2iU1WRdWWGOgmGMZdSaT1zFnF18OOgPx0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2531897},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","prepack":"bun run build && bun run scan:artifact","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","scan:artifact":"bun scripts/artifact-scan.ts","prepublishOnly":"bun run validate:package","dashboard:build":"cd dashboard && bun run build","validate:package":"bun run build && bun scripts/validate-package.ts","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"11.18.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"22.22.3","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.16","@hasna/secrets":"0.3.6","ink-text-input":"^6.0.0","@hasna/contracts":"0.13.4","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0","@hasna/contracts":"0.13.4"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.7.5_1787493319121_0.22070386680407394","host":"s3://npm-registry-packages-npm-production"}},"0.7.6":{"name":"@hasna/hooks","version":"0.7.6","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.7.6","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"1b24d4016de21b9596300f066d049bde4e5d2bd6","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.7.6.tgz","fileCount":308,"integrity":"sha512-q4CCftJqjtjjmoEBF9Ee/5pK0QYf8EICOGj9+YQlXJCNDqF/92RSl+EBGML8GHGKCoU3Jx+3fUf4axGeaYRl/A==","signatures":[{"sig":"MEUCIQDTKmJV6sDoQMgFG9SjZiqemM4sPFsNtjgh9SezrKrLdgIgb1RhlGWLL5TZQvolbnfVJ58Byl+tSCk0P5W9Rm4ZtrY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2532179},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","prepack":"bun run build && bun run scan:artifact","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","scan:artifact":"bun scripts/artifact-scan.ts","prepublishOnly":"bun run validate:package","dashboard:build":"cd dashboard && bun run build","validate:package":"bun run build && bun scripts/validate-package.ts","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"11.18.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"22.22.3","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.16","@hasna/secrets":"0.3.6","ink-text-input":"^6.0.0","@hasna/contracts":"0.13.4","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0","@hasna/contracts":"0.13.4"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.7.6_1787505172775_0.1984992996248396","host":"s3://npm-registry-packages-npm-production"}},"0.7.7":{"name":"@hasna/hooks","version":"0.7.7","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.7.7","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"fb7061c665761f08d0b04087baaa4bdbc43f8a80","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.7.7.tgz","fileCount":308,"integrity":"sha512-zfsC4wShbv+4MTESHnEj8el1iCVB96mOtc15QafSs38o62wd01P+KR5F7Qcew3E/U++95V0IJgar/wxjz2us1Q==","signatures":[{"sig":"MEUCIQDHpOkY4hoq/aiP11Z/p9YnAB+53Hnpp6KzGo5DgZlkhwIgYy91wN2KdCr7sDWEjCDZZ77L9hf+7SWiKxpCSN9Kn3Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2532179},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","prepack":"bun run build && bun run scan:artifact","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","scan:artifact":"bun scripts/artifact-scan.ts","prepublishOnly":"bun run validate:package","dashboard:build":"cd dashboard && bun run build","validate:package":"bun run build && bun scripts/validate-package.ts","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"11.18.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"22.22.3","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.16","@hasna/secrets":"0.3.7","ink-text-input":"^6.0.0","@hasna/contracts":"0.13.4","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0","@hasna/contracts":"0.13.4"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.7.7_1787558671351_0.7447096069670216","host":"s3://npm-registry-packages-npm-production"}},"0.7.8":{"name":"@hasna/hooks","version":"0.7.8","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.7.8","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"d1d2a00a6601f5d2a4b4d727e8eff7f23301b23d","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.7.8.tgz","fileCount":308,"integrity":"sha512-A13LRgfxCmksk1IKqf7nWtGMXmRafkpnRfG2ftDQxscIrEdXfEAvpKTla0Z5y1CEOzU9bqVdn83ud5VP5ruBTA==","signatures":[{"sig":"MEYCIQDeSmbJ5zEuKm2DOMrvds15LmIoJCCDeJUkwhxgTfOJ/AIhAKKMg1Ls9f/IUYu6Ow+7TqeFJjw3RYjbImWyGyYeJJxw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2553510},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","prepack":"bun run build && bun run scan:artifact","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","scan:artifact":"bun scripts/artifact-scan.ts","prepublishOnly":"bun run validate:package","dashboard:build":"cd dashboard && bun run build","validate:package":"bun run build && bun scripts/validate-package.ts","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"11.18.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"22.22.3","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.16","@hasna/secrets":"0.3.10","ink-text-input":"^6.0.0","@hasna/contracts":"0.14.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0","@hasna/contracts":"0.14.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.7.8_1787612093130_0.7032438516538237","host":"s3://npm-registry-packages-npm-production"}},"0.7.9":{"name":"@hasna/hooks","version":"0.7.9","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.7.9","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"ebd6ea31c8d44f8a64fae8e524a9ca92722b7e99","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.7.9.tgz","fileCount":308,"integrity":"sha512-9cnHqw5tyNTK2lTWLq2xXAScZDiufLhormLgzOb/lLbMUVTYr17x673a08CObNl3zijMmYhQUXbZg70YW2gy+w==","signatures":[{"sig":"MEUCIQDS/x0fQ7Tv4yO7iBMNDfGQ+Deho/qees19kAuDhWtVLwIgNi6F6HPNCt+1N98oLCFCgDO1taL+BYVEMeC8Lcy38D0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2554453},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","prepack":"bun run build && bun run scan:artifact","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"mkdir -p $HOME/.hasna/hooks/profiles 2>/dev/null || true","dashboard:dev":"cd dashboard && bun run dev","scan:artifact":"bun scripts/artifact-scan.ts","prepublishOnly":"bun run validate:package","dashboard:build":"cd dashboard && bun run build","validate:package":"bun run build && bun scripts/validate-package.ts","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"11.18.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"22.22.3","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.16","@hasna/secrets":"0.3.10","ink-text-input":"^6.0.0","@hasna/contracts":"0.14.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0","@hasna/contracts":"0.14.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.7.9_1787677262292_0.5996838119618677","host":"s3://npm-registry-packages-npm-production"}},"0.7.10":{"name":"@hasna/hooks","version":"0.7.10","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":"Hasna","license":"Apache-2.0","_id":"@hasna/hooks@0.7.10","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"d128907b074fc826492d15e51a15a84cf56e8c84","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.7.10.tgz","fileCount":312,"integrity":"sha512-Metu+v7Rd7t4I1mBdCQTRzMygbzqM4rRkAVlE/NA255kCVDqixjfiuNEtZTaSPfKw8q045D2qhUUIBafXzkzIA==","signatures":[{"sig":"MEUCIDtzIiOVOFsiS7cv4Wu9qmiPAQi6jjI6DjTCk0u9TyVXAiEApOvxsMijM2LM0GnyckO1BVLSJUI9gHmFFOJlfqpjLT0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHnIbwwpwuWx9J7SyE4ZfjH83P93GhL7rlSsUzrEjJ8kAiAdpNpdEgeqvdP0cY7U0Xx4f+WYI9+aYv5vaAItpMnKIA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2604489},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","shasum":"d128907b074fc826492d15e51a15a84cf56e8c84","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","prepack":"bun run build && bun run scan:artifact","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"node scripts/ensure-profiles-dir.mjs","dashboard:dev":"cd dashboard && bun run dev","scan:artifact":"bun scripts/artifact-scan.ts","prepublishOnly":"bun run validate:package","dashboard:build":"cd dashboard && bun run build","validate:package":"bun run build && bun scripts/validate-package.ts","dashboard:preview":"cd dashboard && bun run preview"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"_integrity":"sha512-Metu+v7Rd7t4I1mBdCQTRzMygbzqM4rRkAVlE/NA255kCVDqixjfiuNEtZTaSPfKw8q045D2qhUUIBafXzkzIA==","repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"10.8.3","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"24.3.0","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/paths":"0.1.0","@hasna/events":"^0.1.16","@hasna/secrets":"0.3.10","ink-text-input":"^6.0.0","@hasna/contracts":"0.14.1","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"latest","typescript":"^5","@types/react":"^18.2.0","@hasna/contracts":"0.14.1"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.7.10_1787855548557_0.9250075393919763","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@hasna/hooks","version":"0.8.0","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.8.0","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"a1ca7a71eb8d936a8ec43aa4d22bd4c666142721","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.8.0.tgz","fileCount":315,"integrity":"sha512-pg5+Ys8PX8wB0QDkPaP4ErxmHu3G7GD/kJFckmb3gxWoxjo0ysZQwWspttG34w9fQ5flxbe868MXaUc8bVkhYQ==","signatures":[{"sig":"MEUCIQDf9UoHIUygMAPmKaqlolvJbPJXhqEuTcJOUUrC64yBggIgQaa+ESamwuJ9GEtm8oY8kKioxuKgbKLQIUN5z/feRAk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDDr/j53rVSnvVT3r6z7HxR3uKyPeSQslFdxJHaO/nBRwIgF9k/Fq3AVRRXj3C3B/bfyol5EYo/JS22DyyeJ7lDpG4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2686290},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","prepack":"bun run build && bun run scan:artifact","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"node scripts/ensure-profiles-dir.mjs","scan:artifact":"bun scripts/artifact-scan.ts","prepublishOnly":"bun run validate:package","validate:package":"bun run build && bun scripts/validate-package.ts"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"11.19.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"24.20.0","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.16","@hasna/secrets":"0.3.10","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"1.3.14","typescript":"^5","@types/react":"^18.2.0","@hasna/contracts":"1.0.2"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.8.0_1788795224899_0.028464256047034064","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@hasna/hooks","version":"0.9.0","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.9.0","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"f3ef4c758e615d2c3dcc0cd1f6de9a80507db59c","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.9.0.tgz","fileCount":278,"integrity":"sha512-v/sjmcdeOjjNob2HLOyUqX1Ul5mTFHDb2nTJEjagDz3CyNFLbvGdcRkppzbUeui9cNowYRVU803e54sINkQmrQ==","signatures":[{"sig":"MEQCIAUc1r88g+RuHQwF/SyFMqO1WqGBKTlz4ZkpueFeREMiAiBgZ69PLtHxz7uyanjfGnh/shlvGolCFCCVgZsHGChRpg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIDRWWQkLLwdzXlDks7Xs/sVmVtsXrX/IvnRC6YRZTlF3AiEAuQy1wCdPwLo1IvJKYkFW3kOD4H9QrGH3leAxLkC/EKg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2572375},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"gitHead":"fb59fb6a37c0b126e6e3316a654e3c42d074f73c","scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","prepack":"bun run build && bun run scan:artifact","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"node scripts/ensure-profiles-dir.mjs","scan:artifact":"bun scripts/artifact-scan.ts","prepublishOnly":"bun run validate:package","validate:package":"bun run build && bun scripts/validate-package.ts"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"11.19.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"24.21.0","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.16","@hasna/secrets":"0.3.10","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"1.3.14","typescript":"^5","@types/react":"^18.2.0","@hasna/contracts":"1.0.2"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.9.0_1789148392139_0.6610361933894269","host":"s3://npm-registry-packages-npm-production"}},"0.9.1":{"name":"@hasna/hooks","version":"0.9.1","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.9.1","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/hooks#readme","bugs":{"url":"https://github.com/hasna/hooks/issues"},"bin":{"hooks":"bin/index.js","hooks-mcp":"bin/hooks-mcp.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"bf6bf892abd927fc2f9006aee2731bec59a81ccd","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.9.1.tgz","fileCount":281,"integrity":"sha512-BqHARBR5KZsK03DpEa/94SY1s00C4KRZJXvtnSYx0jojU5FlYNseRcZowAqos8oDej/Z1yqMCAvAVEhxxIa/Ag==","signatures":[{"sig":"MEUCIQDpN2jdITaY+JqcACQ0DL3Bn8/4OljUYSLkCGDfYniUfQIgWdUD5En7lyce5Fqooty4KH4SKK/Ur0hgitxWtslwNgI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDK3oOqHl9bMEcJ4n1ePBQykDPfhu0/Olu2KG8zSssodwIhAKfVcC9kiSQb2d70Hp9xSLp3HErEmWKRw/N36uwoxtGP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2840997},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./sdk":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"gitHead":"dd382f663c864a8d5a0ae6cfc85b4ad6d89a727e","scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/mcp/hooks-mcp.ts --outdir ./bin --target bun --external pg --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/sdk/index.ts --outdir ./dist/sdk --target bun && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","prepack":"bun run build && bun run scan:artifact","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"node scripts/ensure-profiles-dir.mjs","scan:artifact":"bun scripts/artifact-scan.ts","prepublishOnly":"bun run validate:package","validate:package":"bun run build && bun scripts/validate-package.ts"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/hooks.git","type":"git"},"_npmVersion":"11.19.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"26.7.0","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.16","@hasna/secrets":"0.3.10","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"1.3.14","typescript":"^5","@types/react":"^18.2.0","@hasna/contracts":"1.0.2"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.9.1_1789672204949_0.7711715821945717","host":"s3://npm-registry-packages-npm-production"}},"0.9.2":{"name":"@hasna/hooks","version":"0.9.2","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.9.2","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/apps/tree/main/apps/hooks#readme","bugs":{"url":"https://github.com/hasna/apps/issues"},"bin":{"hooks":"bin/index.js","hooks-mcp":"bin/hooks-mcp.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"b26e00ae9a33f6c8a72157d3255e86f314ae8f0a","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.9.2.tgz","fileCount":284,"integrity":"sha512-SQG8npPRxILz+cHCYNe8b2ypMFjQF10/aCpZ52VWI9KeGylFUefYgwYs+DbqQYrAmqQXUqgIlZ9giq7pmBVY7w==","signatures":[{"sig":"MEQCICSCMUdbMvIKQhHYG/6a3M607a/0uyTPjQQkq4bJEPdKAiAZ0p5VSUDIrkl2Ib+YX2U+UZBiBNKso7nUnrPMz2ouPQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCID0FwTDlqJ2RgKa9NF4FRAI5esm19OGWfTu9cVJ6srPEAiEAwjaA+oOfamhJu1k6UYqRP36+s9xPWxFCOjlfUoZeeSY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2868216},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./sdk":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/mcp/hooks-mcp.ts --outdir ./bin --target bun --external pg --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/sdk/index.ts --outdir ./dist/sdk --target bun && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","prepack":"bun run build && bun run scan:artifact","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"node scripts/ensure-profiles-dir.mjs","scan:artifact":"bun scripts/artifact-scan.ts","prepublishOnly":"bun run validate:package","validate:package":"bun run build && bun scripts/validate-package.ts"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/apps.git","type":"git","directory":"apps/hooks"},"_npmVersion":"11.19.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"24.20.0","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.16","@hasna/secrets":"0.3.10","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"1.3.14","typescript":"^5","@types/react":"^18.2.0","@hasna/contracts":"1.0.2"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.9.2_1789902640807_0.6568584733435976","host":"s3://npm-registry-packages-npm-production"}},"0.9.3":{"name":"@hasna/hooks","version":"0.9.3","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.9.3","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/apps/tree/main/apps/hooks#readme","bugs":{"url":"https://github.com/hasna/apps/issues"},"bin":{"hooks":"bin/index.js","hooks-mcp":"bin/hooks-mcp.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"0d8f1eae7f8587c60f8e47cdcfd88788f24e795b","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.9.3.tgz","fileCount":285,"integrity":"sha512-nUeCwm5tV+hqCvVZlsdzvuJ+y8eEF+vxS1XiaYlC1qktgBz9AtF9hDFXjSzLr10BJPnKPHBSj/SauFixnLwbnw==","signatures":[{"sig":"MEYCIQCTcCxWKwGU0iyZxrUyTovn73WkKhRvf2woY43E7wVghgIhAMr+4eMGBTchnifaBgtSjwny1c445hbw7RUZmrwORq9z","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIHj/6B57GFjBj7ZB4w7B1vY/dFnZELPEwqnktsk1xFnAAiEA4x4EpEahklsmAlX94k/xUw/fDyWAiObzAqaCY8YlTXg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2884349},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./sdk":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/mcp/hooks-mcp.ts --outdir ./bin --target bun --external pg --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/sdk/index.ts --outdir ./dist/sdk --target bun && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","prepack":"bun run build && bun run scan:artifact","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"node scripts/ensure-profiles-dir.mjs","scan:artifact":"bun scripts/artifact-scan.ts","prepublishOnly":"bun run validate:package","validate:package":"bun run build && bun scripts/validate-package.ts"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/apps.git","type":"git","directory":"apps/hooks"},"_npmVersion":"11.19.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"24.20.0","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.16","@hasna/secrets":"0.3.10","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"1.3.14","typescript":"^5","@types/react":"^18.2.0","@hasna/contracts":"1.0.2"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.9.3_1789914129034_0.330448028840834","host":"s3://npm-registry-packages-npm-production"}},"0.9.4":{"name":"@hasna/hooks","version":"0.9.4","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.9.4","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/apps/tree/main/apps/hooks#readme","bugs":{"url":"https://github.com/hasna/apps/issues"},"bin":{"hooks":"bin/index.js","hooks-mcp":"bin/hooks-mcp.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"8633532518a502f4b6b20782019d224354dbab5d","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.9.4.tgz","fileCount":285,"integrity":"sha512-tOLqOqWVuKtL8eL1o5/HetnlWauydz8p2YB8hSLgQGreSgWplShasCOky+ZBh2eIH+5SWrGHW3xdDs76c76B+A==","signatures":[{"sig":"MEQCID+47rS0Qf1eW8SyVuBZCNtkUB8Gc92mCDM/ZmJj33sfAiBjANbAKt+VW/DLll/ViGrPlEjcNgHz0Pa+dg/eJ9RIkQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDQtAOw0rZP+LQek78ZNrbAdippi9Wrm6eJKaxIgtcTmgIhAIpdUb5ioxUm0U7LTVPzqth9dmPUceFj/uNoqQRpWw38","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2888963},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./sdk":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/mcp/hooks-mcp.ts --outdir ./bin --target bun --external pg --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/sdk/index.ts --outdir ./dist/sdk --target bun && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","prepack":"bun run build && bun run scan:artifact","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"node scripts/ensure-profiles-dir.mjs","scan:artifact":"bun scripts/artifact-scan.ts","prepublishOnly":"bun run validate:package","validate:package":"bun run build && bun scripts/validate-package.ts"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/apps.git","type":"git","directory":"apps/hooks"},"_npmVersion":"11.19.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"24.20.0","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.16","@hasna/secrets":"0.3.10","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"1.3.14","typescript":"^5","@types/react":"^18.2.0","@hasna/contracts":"1.0.2"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.9.4_1789917002745_0.5881278066487559","host":"s3://npm-registry-packages-npm-production"}},"0.9.5":{"name":"@hasna/hooks","version":"0.9.5","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.9.5","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/apps/tree/main/apps/hooks#readme","bugs":{"url":"https://github.com/hasna/apps/issues"},"bin":{"hooks":"bin/index.js","hooks-mcp":"bin/hooks-mcp.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"c5c4616adcea61f876262429663bb215411243c9","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.9.5.tgz","fileCount":285,"integrity":"sha512-gcgwposal8UgOE+wwYb1rhI49C1rAe/oLdhtG1kETCnyCBdotBHV7oewNw2ve0ZBHpOR8GGvjiVMBWs6s4XKTw==","signatures":[{"sig":"MEUCIQD75puPS6WytaCPU7CdP/+1/i0HOBoRSrlm19Z/M5CYWwIgQ80i0RJSuGRbO3lF4l2xcfHx05+7FSiUatCB4QJV0yA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDAabmPofZgXd5zc8iCSrIWXZ/atNg5S+6MFU5lF473QAiAMlj7WqMx4kVP73EYn1aOegfmImT9xGz7y0NY1nBA9sA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2937130},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./sdk":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/mcp/hooks-mcp.ts --outdir ./bin --target bun --external pg --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/sdk/index.ts --outdir ./dist/sdk --target bun && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:types","prepack":"bun run build && bun run scan:artifact","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"node scripts/ensure-profiles-dir.mjs","scan:artifact":"bun scripts/artifact-scan.ts","prepublishOnly":"bun run validate:package","validate:package":"bun run build && bun scripts/validate-package.ts"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/apps.git","type":"git","directory":"apps/hooks"},"_npmVersion":"11.19.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"24.20.0","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.16","@hasna/secrets":"0.4.2","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"1.3.14","typescript":"^5","@types/react":"^18.2.0","@hasna/contracts":"1.2.1"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.9.5_1789922736689_0.5037492319021866","host":"s3://npm-registry-packages-npm-production"}},"0.9.6":{"name":"@hasna/hooks","version":"0.9.6","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.9.6","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/apps/tree/main/apps/hooks#readme","bugs":{"url":"https://github.com/hasna/apps/issues"},"bin":{"hooks":"bin/index.js","hooks-mcp":"bin/hooks-mcp.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"69b2d125ee85d110d6d3d4823b5d43ab9a228a97","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.9.6.tgz","fileCount":293,"integrity":"sha512-MAiij0Q0kSykQD4s80Y6h5T/hd4AxpFo1L+LgO7FnmkLVg/eBOiCDm1N1/3lLdLLiyPYHYJ/lobstlQ5jTDhQg==","signatures":[{"sig":"MEUCIQCAhtnJLBlj9/LQUONypJtXmswqrfZZjyeo5b0YPGByKAIgFQjZ4GevS2J906yf/cAwpZYYn9AkOLDADwEu6oCFSGU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHMMO2809zTXFgVoZmDBC6Mbw9qDO7SCMhUzcDQRLm/bAiB9Ow6NtLHIvJVDBtnNaqgC+bpXs5qdZDf9n0KCfivAlA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3072294},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./sdk":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/mcp/hooks-mcp.ts --outdir ./bin --target bun --external pg --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/sdk/index.ts --outdir ./dist/sdk --target bun && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:native-safety && bun run build:types","prepack":"bun run build && bun run scan:artifact","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"node scripts/ensure-profiles-dir.mjs","generate:sdk":"bun run scripts/generate-sdk.ts","scan:artifact":"bun scripts/artifact-scan.ts","prepublishOnly":"bun run validate:package","validate:package":"bun run build && bun scripts/validate-package.ts","verify:generated":"bun run scripts/verify-generated-artifacts.ts","build:native-safety":"bun build ./hooks/native-safety-entry.ts --outdir ./bin --target bun --define import.meta.main=false"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/apps.git","type":"git","directory":"apps/hooks"},"_npmVersion":"11.19.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"26.7.0","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.16","@hasna/secrets":"0.4.2","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"1.3.14","typescript":"^5","@types/react":"^18.2.0","@hasna/contracts":"~1.2.1"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.9.6_1789997446195_0.36463935528071856","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@hasna/hooks","version":"0.10.0","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.10.0","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/apps/tree/main/apps/hooks#readme","bugs":{"url":"https://github.com/hasna/apps/issues"},"bin":{"hooks":"bin/index.js","hooks-mcp":"bin/hooks-mcp.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"8dd0a381c3f1a39ff2f7ef5d0342587e70829c0d","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.10.0.tgz","fileCount":293,"integrity":"sha512-QOXqdpGnhUdg4KLCrXfbLJ2mxCWnijpXH4UgavU9xP+CU/Jipumhkt5Wop6Uh3wONIpKWlzB3zdlCN8AkF4ohQ==","signatures":[{"sig":"MEYCIQDuUzj7tY++mEsjv11ddrS26hGvalGn+hDuoUReFR432AIhAJmsJtk+0mx3E0HMpG6TkDxd6/mE+4xIgFIuWVC4n+g+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFKtdCSKmiiih5s6NVqLfjaxdiIfcWIQNTuYQ63KY/oFAiBfDZf5ocizNytN98nLiQkldt0gMnIrVLSXa880SUsk8Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3072295},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./sdk":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/mcp/hooks-mcp.ts --outdir ./bin --target bun --external pg --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/sdk/index.ts --outdir ./dist/sdk --target bun && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:native-safety && bun run build:types","prepack":"bun run build && bun run scan:artifact","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"node scripts/ensure-profiles-dir.mjs","generate:sdk":"bun run scripts/generate-sdk.ts","scan:artifact":"bun scripts/artifact-scan.ts","prepublishOnly":"bun run validate:package","validate:package":"bun run build && bun scripts/validate-package.ts","verify:generated":"bun run scripts/verify-generated-artifacts.ts","build:native-safety":"bun build ./hooks/native-safety-entry.ts --outdir ./bin --target bun --define import.meta.main=false"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/apps.git","type":"git","directory":"apps/hooks"},"_npmVersion":"11.19.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"26.7.0","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.16","@hasna/secrets":"0.4.2","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"1.3.14","typescript":"^5","@types/react":"^18.2.0","@hasna/contracts":"~1.2.1"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.10.0_1790003582565_0.4376787356349321","host":"s3://npm-registry-packages-npm-production"}},"0.10.1":{"name":"@hasna/hooks","version":"0.10.1","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.10.1","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/apps/tree/main/apps/hooks#readme","bugs":{"url":"https://github.com/hasna/apps/issues"},"bin":{"hooks":"bin/index.js","hooks-mcp":"bin/hooks-mcp.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"2824da2392cd27537455e3c6c58f9064b37dd151","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.10.1.tgz","fileCount":293,"integrity":"sha512-quihCF+obH7PSYcmU1/OmgWcgACXEop6SmGVnyvVC6dAu/LGlTyHOu57+DYjWBBCwVmejmIWj3LD2oiDnj7MZA==","signatures":[{"sig":"MEQCIARmHjrXZpSZoz/NfYbGu9PZUx6hHI88LhU3ZrLkwJFZAiAGK4G2MFOvBXAmNCetlDbw7gHFPgr/8UR2GYFtMmql6A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCID64BWYD4sQGCDm9IE9qMYoAFDpySyTaYMh04MTbpgCmAiB46QaU2d7XE7F3qpeQsQIW/bkwopU6qZPkIlYg6Rb19g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3074168},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./sdk":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/mcp/hooks-mcp.ts --outdir ./bin --target bun --external pg --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/sdk/index.ts --outdir ./dist/sdk --target bun && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:native-safety && bun run build:types","prepack":"bun run build && bun run scan:artifact","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"node scripts/ensure-profiles-dir.mjs","generate:sdk":"bun run scripts/generate-sdk.ts","scan:artifact":"bun scripts/artifact-scan.ts","prepublishOnly":"bun run validate:package","validate:package":"bun run build && bun scripts/validate-package.ts","verify:generated":"bun run scripts/verify-generated-artifacts.ts","build:native-safety":"bun build ./hooks/native-safety-entry.ts --outdir ./bin --target bun --define import.meta.main=false"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/apps.git","type":"git","directory":"apps/hooks"},"_npmVersion":"11.19.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"26.7.0","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.16","@hasna/secrets":"0.4.2","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"1.3.14","typescript":"^5","@types/react":"^18.2.0","@hasna/contracts":"~1.2.1"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.10.1_1790007697504_0.6800415988510453","host":"s3://npm-registry-packages-npm-production"}},"0.10.2":{"name":"@hasna/hooks","version":"0.10.2","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.10.2","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/apps/tree/main/apps/hooks#readme","bugs":{"url":"https://github.com/hasna/apps/issues"},"bin":{"hooks":"bin/index.js","hooks-mcp":"bin/hooks-mcp.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"7309ccf1fe3411de9c9deed2eb8a91def05c7035","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.10.2.tgz","fileCount":294,"integrity":"sha512-B7dfbpN7nbVBqXaiI38ozlqJadhT9f+EgwYOz7QoF4Eqg2ICDKeYznvScI/5PgGnWiwqd5ulooHCvN8shEAz5g==","signatures":[{"sig":"MEQCIHNfe1EFmLS11tMMNkbGJwryNPhOozRVQY38raZBLtCWAiANP4P2S1Fdp3Yo0jVkzYZnZMS/Yra8Qu9ENwmO6+INoA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQD0KdLgDJq1FNL50F9IgHBMN3NH7zGCnaL0Bha9MsBDawIgNZOt399KE3A1gR5wCAqRR1FhKYU46UP/eJxZGdZKRBM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6794894},"main":"./dist/index.js","type":"module","_from":"file:/home/hasna/.hasna/scratchpad/scratch/skills-curation-luna12-20260919/fleet-claude-urgent-20260921/candidate-hooks0102/hasna-hooks-0.10.2.tgz","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./sdk":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/mcp/hooks-mcp.ts --outdir ./bin --target bun --external pg --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/sdk/index.ts --outdir ./dist/sdk --target bun && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:native-safety && bun run build:types","prepack":"bun run build && bun run scan:artifact","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"node scripts/ensure-profiles-dir.mjs","generate:sdk":"bun run scripts/generate-sdk.ts","scan:artifact":"bun scripts/artifact-scan.ts","prepublishOnly":"bun run validate:package","validate:package":"bun run build && bun scripts/validate-package.ts","verify:generated":"bun run scripts/verify-generated-artifacts.ts","build:native-safety":"bun build ./hooks/native-safety-entry.ts --outdir ./bin --target bun --define import.meta.main=false"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"_resolved":"/home/hasna/.hasna/scratchpad/scratch/skills-curation-luna12-20260919/fleet-claude-urgent-20260921/candidate-hooks0102/hasna-hooks-0.10.2.tgz","_integrity":"sha512-B7dfbpN7nbVBqXaiI38ozlqJadhT9f+EgwYOz7QoF4Eqg2ICDKeYznvScI/5PgGnWiwqd5ulooHCvN8shEAz5g==","repository":{"url":"git+https://github.com/hasna/apps.git","type":"git","directory":"apps/hooks"},"_npmVersion":"11.19.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"24.20.0","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.16","@hasna/skills":"0.9.14","@hasna/secrets":"0.4.2","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"1.3.14","typescript":"^5","@types/react":"^18.2.0","@hasna/contracts":"~1.2.1"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.10.2_1790049649253_0.9508894645288357","host":"s3://npm-registry-packages-npm-production"}},"0.10.3":{"name":"@hasna/hooks","version":"0.10.3","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.10.3","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/apps/tree/main/apps/hooks#readme","bugs":{"url":"https://github.com/hasna/apps/issues"},"bin":{"hooks":"bin/index.js","hooks-mcp":"bin/hooks-mcp.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"51b2c3c3992ea09a5a0fbe7db3621b3ad870ad33","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.10.3.tgz","fileCount":294,"integrity":"sha512-69MpE+BFDWhkMP795e65Uvk+3CHWxZ3OPj5M7eDx9Y81b57x4gTy/LF9n4yKMjbxOUc4/0B9pq6me5389bc8Mg==","signatures":[{"sig":"MEQCIEVDbE0T7vF4+Os5cvQFlQn5y9u30Tf+TutCKosYaCdhAiACceq/VR4BjbcetHW0PySVNvN25Zk4NI9WrTM2bE5Gmw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIDXoVSdJ5toM/eQbcm3KvaHLKLC+XYWlI0uuXylimA9FAiEAitXWI4izlKZ3qqCSfEV6eVgJVJZZgPe/tYV0oxhpO8k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6824345},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./sdk":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/mcp/hooks-mcp.ts --outdir ./bin --target bun --external pg --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/sdk/index.ts --outdir ./dist/sdk --target bun && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:native-safety && bun run build:types","prepack":"bun run build && bun run scan:artifact","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"node scripts/ensure-profiles-dir.mjs","generate:sdk":"bun run scripts/generate-sdk.ts","scan:artifact":"bun scripts/artifact-scan.ts","prepublishOnly":"bun run validate:package","validate:package":"bun run build && bun scripts/validate-package.ts","verify:generated":"bun run scripts/verify-generated-artifacts.ts","build:native-safety":"bun build ./hooks/native-safety-entry.ts --outdir ./bin --target bun --define import.meta.main=false"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/apps.git","type":"git","directory":"apps/hooks"},"_npmVersion":"11.19.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"24.20.0","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.16","@hasna/skills":"0.9.14","@hasna/secrets":"0.4.2","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"1.3.14","typescript":"^5","@types/react":"^18.2.0","@hasna/contracts":"~1.2.1"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.10.3_1790081890018_0.33992513843104977","host":"s3://npm-registry-packages-npm-production"}},"0.10.4":{"name":"@hasna/hooks","version":"0.10.4","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.10.4","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/apps/tree/main/apps/hooks#readme","bugs":{"url":"https://github.com/hasna/apps/issues"},"bin":{"hooks":"bin/index.js","hooks-mcp":"bin/hooks-mcp.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"faf3d804500630c3e397383b82709ac6fd563b5b","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.10.4.tgz","fileCount":297,"integrity":"sha512-db066wAtyf+xL85XJpVq6vUGWz8JCnIzH3SPeZHpVVs4CtlImZ3XEs0FylMWnY7vSGSprIgBP4iUJXdFp4gBJQ==","signatures":[{"sig":"MEUCIFdAsO/Q+v3fCYWAM1sacXfTOuYupzQQiXISBMk7Cdw2AiEAiQQXFrngPt5bUcayMpW+t2tR33I+wkwWdCw8ZncYV88=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIQDEUGLMLHnnlbYZgTPEKBQbhm/72uGRFOSrDaPKqbW6DgIfSHPvPd5aJPaiZtNGBgz0E8k4ozFqJGAlrSQ+npv3EA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6880422},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./sdk":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"},"./native-safety":{"types":"./dist/native-safety.d.ts","import":"./dist/native-safety.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/mcp/hooks-mcp.ts --outdir ./bin --target bun --external pg --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/sdk/index.ts --outdir ./dist/sdk --target bun && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:native-safety && bun run build:types","prepack":"bun run build && bun run scan:artifact","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"node scripts/ensure-profiles-dir.mjs","generate:sdk":"bun run scripts/generate-sdk.ts","scan:artifact":"bun scripts/artifact-scan.ts","prepublishOnly":"bun run validate:package","validate:package":"bun run build && bun scripts/validate-package.ts","verify:generated":"bun run scripts/verify-generated-artifacts.ts","build:native-safety":"bun build ./hooks/native-safety-entry.ts --outdir ./bin --target bun --define import.meta.main=false && bun build ./src/native-safety.ts --outdir ./dist --target bun"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/apps.git","type":"git","directory":"apps/hooks"},"_npmVersion":"11.19.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"26.8.1","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.16","@hasna/skills":"0.9.14","@hasna/secrets":"0.4.2","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"1.3.14","typescript":"^5","@types/react":"^18.2.0","@hasna/contracts":"~1.2.1"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.10.4_1790102556660_0.487403462349123","host":"s3://npm-registry-packages-npm-production"}},"0.10.5":{"name":"@hasna/hooks","version":"0.10.5","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.10.5","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/apps/tree/main/apps/hooks#readme","bugs":{"url":"https://github.com/hasna/apps/issues"},"bin":{"hooks":"bin/index.js","hooks-mcp":"bin/hooks-mcp.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"ed59fdbd1dbe44f1a3ad178959090fbaef11546a","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.10.5.tgz","fileCount":297,"integrity":"sha512-xcobgomvivnvvPzfiF+eCjiFOygeOTQQXdA8syFYGwnE5cDINpPnnv+hc2LVij3w5kkbZ68uos9zIXqBhR7fiA==","signatures":[{"sig":"MEUCIQDKWwiqrt0LhIgMmam7Ty7NJKiP7fgdUzHJKoT2Ff8A2AIgRolbY3UHsPSJrZU7+o0rKd4xAmIeGaLv8umS340cU14=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDx054R53Id/+aDMIWcqGnXlSDUctzT3BXRTO0CLChHqAiAl3a2VelAD6O7PpjezKuvE81umRBRW2rkgHBMpww3iWw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6891991},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./sdk":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"},"./native-safety":{"types":"./dist/native-safety.d.ts","import":"./dist/native-safety.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/mcp/hooks-mcp.ts --outdir ./bin --target bun --external pg --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/sdk/index.ts --outdir ./dist/sdk --target bun && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:native-safety && bun run build:types","prepack":"bun run build && bun run scan:artifact","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"node scripts/ensure-profiles-dir.mjs","generate:sdk":"bun run scripts/generate-sdk.ts","scan:artifact":"bun scripts/artifact-scan.ts","prepublishOnly":"bun run validate:package","validate:package":"bun run build && bun scripts/validate-package.ts","verify:generated":"bun run scripts/verify-generated-artifacts.ts","build:native-safety":"bun build ./hooks/native-safety-entry.ts --outdir ./bin --target bun --define import.meta.main=false && bun build ./src/native-safety.ts --outdir ./dist --target bun"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"repository":{"url":"git+https://github.com/hasna/apps.git","type":"git","directory":"apps/hooks"},"_npmVersion":"11.19.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"26.8.1","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.16","@hasna/skills":"0.9.14","@hasna/secrets":"0.4.2","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"1.3.14","typescript":"^5","@types/react":"^18.2.0","@hasna/contracts":"~1.2.1"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.10.5_1790115762133_0.2931270802970356","host":"s3://npm-registry-packages-npm-production"}},"0.10.6":{"name":"@hasna/hooks","version":"0.10.6","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.10.6","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/apps/tree/main/apps/hooks#readme","bugs":{"url":"https://github.com/hasna/apps/issues"},"bin":{"hooks":"bin/index.js","hooks-mcp":"bin/hooks-mcp.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"f46a00cd7a3f1a812e7d014543f582523a862f32","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.10.6.tgz","fileCount":297,"integrity":"sha512-/NwumRyZUJ9Wwz4r0SwA4g3hQ5YfCpZCGpuj6nti8sOlqzk8Kc31QA8lBs76jayjLpsHreiNCcKAP24jvBf/yA==","signatures":[{"sig":"MEYCIQCHbg7758SqaVuwK5zVde+mz92yhYyvjApd1hZ13iqqJQIhAMRAaAH1bfQNq0mZa5XwNVQrQ/dateaiOTvqmZ2QmpCl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBc9SnoJFAQfCj0f3d8k7Bc3CyCOLdxEjLGcS5Ng08ZrAiBqTfh0aWiCyqjmfgTJf489RIaLgr2LObUZwH9PzLYf0Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6906292},"main":"./dist/index.js","type":"module","_from":"file:/Users/andreihasna/.hasna/scratchpad/scratch/01a0af51-8109-72f0-9eac-a3f677b46f08/trash-fleet-support-20260922/hooks-0106-publication-prepare-2405/hasna-hooks-0.10.6.tgz","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./sdk":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"},"./native-safety":{"types":"./dist/native-safety.d.ts","import":"./dist/native-safety.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/mcp/hooks-mcp.ts --outdir ./bin --target bun --external pg --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/sdk/index.ts --outdir ./dist/sdk --target bun && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:native-safety && bun run build:types","prepack":"bun run build && bun run scan:artifact","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"node scripts/ensure-profiles-dir.mjs","generate:sdk":"bun run scripts/generate-sdk.ts","scan:artifact":"bun scripts/artifact-scan.ts","prepublishOnly":"bun run validate:package","validate:package":"bun run build && bun scripts/validate-package.ts","verify:generated":"bun run scripts/verify-generated-artifacts.ts","build:native-safety":"bun build ./hooks/native-safety-entry.ts --outdir ./bin --target bun --define import.meta.main=false && bun build ./src/native-safety.ts --outdir ./dist --target bun"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"_resolved":"/Users/andreihasna/.hasna/scratchpad/scratch/01a0af51-8109-72f0-9eac-a3f677b46f08/trash-fleet-support-20260922/hooks-0106-publication-prepare-2405/hasna-hooks-0.10.6.tgz","_integrity":"sha512-/NwumRyZUJ9Wwz4r0SwA4g3hQ5YfCpZCGpuj6nti8sOlqzk8Kc31QA8lBs76jayjLpsHreiNCcKAP24jvBf/yA==","repository":{"url":"git+https://github.com/hasna/apps.git","type":"git","directory":"apps/hooks"},"_npmVersion":"11.19.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"26.7.0","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.16","@hasna/skills":"0.9.14","@hasna/secrets":"0.4.2","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"1.3.14","typescript":"^5","@types/react":"^18.2.0","@hasna/contracts":"~1.2.1"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.10.6_1790199779570_0.4106629059243512","host":"s3://npm-registry-packages-npm-production"}},"0.10.7":{"name":"@hasna/hooks","version":"0.10.7","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.10.7","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/apps/tree/main/apps/hooks#readme","bugs":{"url":"https://github.com/hasna/apps/issues"},"bin":{"hooks":"bin/index.js","hooks-mcp":"bin/hooks-mcp.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"18380ed7d457c5f6664356557b20dd17b108e08a","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.10.7.tgz","fileCount":301,"integrity":"sha512-0pVGvUN/ywLVhC3ewns/Jovs8mwnv+GmyoP2HmhDFoJPqd+ya8Vgw1e/uci8LfGJm5VJZCtEd/vkXymA1hwyDA==","signatures":[{"sig":"MEUCIQC4pX8fSE2nP6JBQdiMU2i6u7Z9h0pnJhSwpGAHymD7FQIgK9dExgQ1KViw1lEEAmDpvBbzBey3OeDof7SQ53GBJbs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCVzLMjw1GXVvdCLalmuEQMsV5XBpm37XILRr1dD1IiQgIgMKF9we+Yrl7MbQZI2uMe/vKYODHy5oEOOPdUdQGb69U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6999375},"main":"./dist/index.js","type":"module","_from":"file:/Users/andreihasna/.hasna/scratchpad/scratch/01a0af51-8109-72f0-9eac-a3f677b46f08/trash-fleet-support-20260922/station-release-3094/hasna-hooks-0.10.7.tgz","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./sdk":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"},"./native-safety":{"types":"./dist/native-safety.d.ts","import":"./dist/native-safety.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/mcp/hooks-mcp.ts --outdir ./bin --target bun --external pg --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/sdk/index.ts --outdir ./dist/sdk --target bun && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:native-safety && bun run build:types","prepack":"bun run build && bun run scan:artifact","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"node scripts/ensure-profiles-dir.mjs","generate:sdk":"bun run scripts/generate-sdk.ts","scan:artifact":"bun scripts/artifact-scan.ts","prepublishOnly":"bun run validate:package","validate:package":"bun run build && bun scripts/validate-package.ts","verify:generated":"bun run scripts/verify-generated-artifacts.ts","build:native-safety":"bun build ./hooks/native-safety-entry.ts --outdir ./bin --target bun --define import.meta.main=false && bun build ./src/native-safety.ts --outdir ./dist --target bun"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"_resolved":"/Users/andreihasna/.hasna/scratchpad/scratch/01a0af51-8109-72f0-9eac-a3f677b46f08/trash-fleet-support-20260922/station-release-3094/hasna-hooks-0.10.7.tgz","_integrity":"sha512-0pVGvUN/ywLVhC3ewns/Jovs8mwnv+GmyoP2HmhDFoJPqd+ya8Vgw1e/uci8LfGJm5VJZCtEd/vkXymA1hwyDA==","repository":{"url":"git+https://github.com/hasna/apps.git","type":"git","directory":"apps/hooks"},"_npmVersion":"11.19.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"26.7.0","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.16","@hasna/skills":"0.9.14","@hasna/secrets":"0.4.2","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"1.3.14","typescript":"^5","@types/react":"^18.2.0","@hasna/contracts":"~1.2.1"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.10.7_1790221559741_0.42849021243318064","host":"s3://npm-registry-packages-npm-production"}},"0.10.8":{"name":"@hasna/hooks","version":"0.10.8","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.10.8","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/apps/tree/main/apps/hooks#readme","bugs":{"url":"https://github.com/hasna/apps/issues"},"bin":{"hooks":"bin/index.js","hooks-mcp":"bin/hooks-mcp.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"950688a5b6af3d0fb5c0949d081212757d22141f","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.10.8.tgz","fileCount":301,"integrity":"sha512-JPzd3Roy1K1S3nTqbG6haUPMrY/s6GCnmFpu5kAMxah7J78pmjtmqsvax+CFyI9XgA4TKxIATeSWuSYlCjzFfQ==","signatures":[{"sig":"MEQCIGHrCortGnZ+3v/a3NVukxrRUem9LhZC67ELaWeaLJq3AiBY911vAAyWn4X9ltu9oETj3/e42GE8iPXXVzLtBehOXw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCHYycqogWaQkkMXlJ3XD1VjanKxE4OwxgTkLeD2m5REwIhAOUcx37WU01iOHsnNpKBdkdA5h0tCEYgppLJ8y1lZ9ei","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7036751},"main":"./dist/index.js","type":"module","_from":"file:/private/tmp/claude-502/-Users-andreihasna--hasna-repos-clones-hasna-internal-business-engines/7d46741f-717a-4841-a31a-18b8b302124b/scratchpad/pack/hasna-hooks-0.10.8.tgz","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./sdk":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"},"./native-safety":{"types":"./dist/native-safety.d.ts","import":"./dist/native-safety.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/mcp/hooks-mcp.ts --outdir ./bin --target bun --external pg --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/sdk/index.ts --outdir ./dist/sdk --target bun && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:native-safety && bun run build:types","prepack":"bun run build && bun run scan:artifact","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"node scripts/ensure-profiles-dir.mjs","generate:sdk":"bun run scripts/generate-sdk.ts","scan:artifact":"bun scripts/artifact-scan.ts","prepublishOnly":"bun run validate:package","validate:package":"bun run build && bun scripts/validate-package.ts","verify:generated":"bun run scripts/verify-generated-artifacts.ts","build:native-safety":"bun build ./hooks/native-safety-entry.ts --outdir ./bin --target bun --define import.meta.main=false && bun build ./src/native-safety.ts --outdir ./dist --target bun"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"_resolved":"/private/tmp/claude-502/-Users-andreihasna--hasna-repos-clones-hasna-internal-business-engines/7d46741f-717a-4841-a31a-18b8b302124b/scratchpad/pack/hasna-hooks-0.10.8.tgz","_integrity":"sha512-JPzd3Roy1K1S3nTqbG6haUPMrY/s6GCnmFpu5kAMxah7J78pmjtmqsvax+CFyI9XgA4TKxIATeSWuSYlCjzFfQ==","repository":{"url":"git+https://github.com/hasna/apps.git","type":"git","directory":"apps/hooks"},"_npmVersion":"11.16.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"26.3.0","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.16","@hasna/skills":"0.9.17","@hasna/secrets":"0.4.2","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"1.3.14","typescript":"^5","@types/react":"^18.2.0","@hasna/contracts":"~1.2.1"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.10.8_1790277250118_0.3297848054070758","host":"s3://npm-registry-packages-npm-production"}},"0.10.9":{"name":"@hasna/hooks","version":"0.10.9","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"author":{"name":"Hasna"},"license":"Apache-2.0","_id":"@hasna/hooks@0.10.9","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"homepage":"https://github.com/hasna/apps/tree/main/apps/hooks#readme","bugs":{"url":"https://github.com/hasna/apps/issues"},"bin":{"hooks":"bin/index.js","hooks-mcp":"bin/hooks-mcp.js","hooks-serve":"bin/serve.js"},"dist":{"shasum":"6844d8e3484729e40f115f45f150ba8b18aa1796","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.10.9.tgz","fileCount":301,"integrity":"sha512-mTHl3ojIaCE+y0vr3NOXZnoh1KgAZMttriPdUjgMLvk/gAx9ZtH2RZ4wb7v4h8bTOOl5HUEYcHemlfNLvjlRYw==","signatures":[{"sig":"MEYCIQDyAWW1sc6Bymz7zVN1wARtT+HOoTBjnSkSR8DsnXVhAgIhAMuMPA/eIjGH7ksDHiRmw8tCfGX+snptndjnwepsSh7H","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFy0cEMbQFpr2Q935NZDDX3sT6aBCDA2cubURbCkO1F6AiAvMnyUAJW7pU7qaN4lVhev8Qd4DaIeTLeOe9j37qrnow==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7038095},"main":"./dist/index.js","type":"module","_from":"file:/private/tmp/claude-502/-Users-andreihasna--hasna-repos-clones-hasna-internal-business-engines/7d46741f-717a-4841-a31a-18b8b302124b/scratchpad/pack9/hasna-hooks-0.10.9.tgz","types":"./dist/index.d.ts","engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./sdk":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"},"./native-safety":{"types":"./dist/native-safety.d.ts","import":"./dist/native-safety.js"}},"scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/mcp/hooks-mcp.ts --outdir ./bin --target bun --external pg --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/sdk/index.ts --outdir ./dist/sdk --target bun && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:native-safety && bun run build:types","prepack":"bun run build && bun run scan:artifact","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"node scripts/ensure-profiles-dir.mjs","generate:sdk":"bun run scripts/generate-sdk.ts","scan:artifact":"bun scripts/artifact-scan.ts","prepublishOnly":"bun run validate:package","validate:package":"bun run build && bun scripts/validate-package.ts","verify:generated":"bun run scripts/verify-generated-artifacts.ts","build:native-safety":"bun build ./hooks/native-safety-entry.ts --outdir ./bin --target bun --define import.meta.main=false && bun build ./src/native-safety.ts --outdir ./dist --target bun"},"_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"_resolved":"/private/tmp/claude-502/-Users-andreihasna--hasna-repos-clones-hasna-internal-business-engines/7d46741f-717a-4841-a31a-18b8b302124b/scratchpad/pack9/hasna-hooks-0.10.9.tgz","_integrity":"sha512-mTHl3ojIaCE+y0vr3NOXZnoh1KgAZMttriPdUjgMLvk/gAx9ZtH2RZ4wb7v4h8bTOOl5HUEYcHemlfNLvjlRYw==","repository":{"url":"git+https://github.com/hasna/apps.git","type":"git","directory":"apps/hooks"},"_npmVersion":"11.16.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"_nodeVersion":"26.3.0","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.16","@hasna/skills":"0.9.17","@hasna/secrets":"0.4.2","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"1.3.14","typescript":"^5","@types/react":"^18.2.0","@hasna/contracts":"~1.2.1"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.10.9_1790282408904_0.17682255054493035","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"_id":"@hasna/hooks@0.11.0","bin":{"hooks":"bin/index.js","hooks-mcp":"bin/hooks-mcp.js","hooks-serve":"bin/serve.js"},"bugs":{"url":"https://github.com/hasna/apps/issues"},"dist":{"shasum":"e5283fe2f71e1c2cdc7dda02e7a777661b980352","tarball":"https://registry.npmjs.org/@hasna/hooks/-/hooks-0.11.0.tgz","fileCount":307,"integrity":"sha512-CKNNiXaTqssYAjlwnsMREWTPVQ3uWzrlRQ7iPc0ccp2NHjwL0gYuyqIA/3V535Ih6HG3+6SfN+GrbiRI5DjeiA==","signatures":[{"sig":"MEUCIQDE7+viSZnuzg4luTv+oRh+UCwZzMo3lcrQW2uW94L3BwIgLEe/imZjy5ll2NUFSIg/Sgff1po1BXbzq+uD2x984pc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCiJMlAnzpgO1pKB6m8E9rG0rmAENej7HgZ4wN65Ly5CwIhAKIvaRTsmskoIKoe/nNxHTs1IGhylft32WAaZWpCX0FY"}],"unpackedSize":7144929},"main":"./dist/index.js","name":"@hasna/hooks","type":"module","_from":"file:/Users/andreihasna/.hasna/scratchpad/scratch/01a0af51-8109-72f0-9eac-a3f677b46f08/trash-fleet-support-20260922/s3-glacier-20260924/continuation-3572/hooks-release-5444/hasna-hooks-0.11.0.tgz","types":"./dist/index.d.ts","author":{"name":"Hasna"},"engines":{"bun":">=1.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./sdk":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"},"./native-safety":{"types":"./dist/native-safety.d.ts","import":"./dist/native-safety.js"},"./native-readiness":{"types":"./dist/native-readiness.d.ts","import":"./dist/native-readiness.js"}},"license":"Apache-2.0","scripts":{"dev":"bun run ./src/cli/index.tsx","test":"bun test","build":"rm -rf dist bin && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external pg --external ink --external react --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/serve.ts --outdir ./bin --target bun --external pg && bun build ./src/mcp/hooks-mcp.ts --outdir ./bin --target bun --external pg --external chalk --external conf --external @modelcontextprotocol/sdk --external zod && bun build ./src/sdk/index.ts --outdir ./dist/sdk --target bun && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun --external pg && bun run build:native-safety && bun run build:types","prepack":"bun run build && bun run scan:artifact","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","postinstall":"node scripts/ensure-profiles-dir.mjs","generate:sdk":"bun run scripts/generate-sdk.ts","scan:artifact":"bun scripts/artifact-scan.ts","prepublishOnly":"bun run validate:package","validate:package":"bun run build && bun scripts/validate-package.ts","verify:generated":"bun run scripts/verify-generated-artifacts.ts","build:native-safety":"bun build ./hooks/native-safety-entry.ts --outdir ./bin --target bun --define import.meta.main=false && bun build ./src/native-safety.ts --outdir ./dist --target bun && bun run build:native-readiness","build:native-readiness":"bun build ./hooks/native-readiness-entry.ts --outdir ./bin --target node --format=cjs && bun build ./src/native-readiness.ts --outdir ./dist --target bun"},"version":"0.11.0","_npmUser":{"name":"andreihasna2","email":"andrei@hasna.com"},"homepage":"https://github.com/hasna/apps/tree/main/apps/hooks#readme","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"_resolved":"/Users/andreihasna/.hasna/scratchpad/scratch/01a0af51-8109-72f0-9eac-a3f677b46f08/trash-fleet-support-20260922/s3-glacier-20260924/continuation-3572/hooks-release-5444/hasna-hooks-0.11.0.tgz","_integrity":"sha512-CKNNiXaTqssYAjlwnsMREWTPVQ3uWzrlRQ7iPc0ccp2NHjwL0gYuyqIA/3V535Ih6HG3+6SfN+GrbiRI5DjeiA==","repository":{"url":"git+https://github.com/hasna/apps.git","type":"git","directory":"apps/hooks"},"_npmVersion":"11.19.0","description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","directories":{},"maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"_nodeVersion":"26.7.0","dependencies":{"pg":"^8.16.3","ink":"^5.0.1","zod":"3.25.76","conf":"^13.0.1","chalk":"^5.3.0","react":"^18.2.0","commander":"^12.1.0","ink-spinner":"^5.0.0","@hasna/events":"^0.1.16","@hasna/skills":"0.9.17","@hasna/secrets":"0.4.2","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@modelcontextprotocol/sdk":"^1.26.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"@types/pg":"^8.15.6","bun-types":"1.3.14","@types/bun":"1.3.14","typescript":"^5","@types/react":"^18.2.0","@hasna/contracts":"~1.2.1"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/hooks_0.11.0_1790319799154_0.029680626103592678"}}},"time":{"created":"2026-02-14T09:06:11.787Z","modified":"2026-09-25T07:03:19.467Z","0.0.1":"2026-02-14T09:06:12.033Z","0.0.2":"2026-02-14T09:08:53.323Z","0.0.3":"2026-02-14T09:16:31.660Z","0.0.4":"2026-02-14T09:17:42.614Z","0.0.5":"2026-02-14T09:27:36.781Z","0.0.6":"2026-02-14T09:36:37.024Z","0.0.7":"2026-02-14T10:43:36.688Z","0.1.0":"2026-02-14T11:02:29.850Z","0.1.1":"2026-02-14T11:16:24.576Z","0.2.0":"2026-02-14T19:57:49.556Z","0.2.1":"2026-02-14T20:33:36.866Z","0.2.2":"2026-02-15T07:59:35.784Z","0.2.3":"2026-02-15T08:36:24.907Z","0.2.4":"2026-03-17T12:29:58.145Z","0.2.5":"2026-03-17T13:48:41.696Z","0.2.6":"2026-03-18T06:08:33.269Z","0.2.7":"2026-03-19T13:44:16.754Z","0.2.8":"2026-03-20T15:17:02.118Z","0.2.9":"2026-03-23T10:59:01.568Z","0.2.10":"2026-03-23T14:44:28.798Z","0.2.11":"2026-03-23T15:11:35.152Z","0.2.12":"2026-03-23T15:32:25.249Z","0.2.13":"2026-05-25T11:58:07.090Z","0.2.14":"2026-05-28T13:11:04.487Z","0.2.15":"2026-05-28T13:32:43.490Z","0.2.16":"2026-06-07T18:16:00.990Z","0.2.17":"2026-06-16T10:51:12.366Z","0.2.18":"2026-06-16T11:09:09.327Z","0.2.19":"2026-06-27T18:22:41.226Z","0.2.20":"2026-06-29T05:29:46.072Z","0.3.0":"2026-07-09T14:55:36.341Z","0.3.1":"2026-07-09T15:00:29.915Z","0.3.2":"2026-07-09T15:17:05.031Z","0.3.3":"2026-07-09T18:37:54.971Z","0.3.4":"2026-07-09T18:44:25.704Z","0.3.5":"2026-07-09T18:47:22.571Z","0.3.6":"2026-07-09T19:28:16.677Z","0.3.7":"2026-07-09T19:36:34.972Z","0.3.8":"2026-07-10T08:35:33.145Z","0.3.9":"2026-07-13T12:00:14.677Z","0.3.10":"2026-07-13T12:18:53.725Z","0.3.11":"2026-07-20T10:54:03.611Z","0.4.0":"2026-07-24T15:11:26.250Z","0.4.1":"2026-07-26T14:44:54.467Z","0.5.0":"2026-07-27T07:34:46.835Z","0.6.0":"2026-08-14T13:26:52.381Z","0.6.1":"2026-08-14T13:51:37.145Z","0.6.2":"2026-08-14T15:07:05.665Z","0.6.3":"2026-08-14T16:07:10.869Z","0.6.4":"2026-08-15T09:30:47.102Z","0.6.5":"2026-08-15T10:37:05.506Z","0.6.6":"2026-08-15T17:09:10.852Z","0.6.8":"2026-08-15T18:35:49.455Z","0.7.0":"2026-08-21T05:28:35.821Z","0.7.2":"2026-08-22T07:02:08.928Z","0.7.3":"2026-08-22T23:43:11.064Z","0.7.4":"2026-08-23T03:03:50.906Z","0.7.5":"2026-08-23T13:55:19.304Z","0.7.6":"2026-08-23T17:12:52.952Z","0.7.7":"2026-08-24T08:04:31.489Z","0.7.8":"2026-08-24T22:54:53.346Z","0.7.9":"2026-08-25T17:01:02.487Z","0.7.10":"2026-08-27T18:32:28.723Z","0.8.0":"2026-09-07T15:33:44.993Z","0.9.0":"2026-09-11T17:39:52.264Z","0.9.1":"2026-09-17T19:10:05.057Z","0.9.2":"2026-09-20T11:10:40.965Z","0.9.3":"2026-09-20T14:22:09.140Z","0.9.4":"2026-09-20T15:10:02.834Z","0.9.5":"2026-09-20T16:45:36.805Z","0.9.6":"2026-09-21T13:30:46.310Z","0.10.0":"2026-09-21T15:13:02.690Z","0.10.1":"2026-09-21T16:21:37.646Z","0.10.2":"2026-09-22T04:00:49.382Z","0.10.3":"2026-09-22T12:58:10.139Z","0.10.4":"2026-09-22T18:42:36.767Z","0.10.5":"2026-09-22T22:22:42.236Z","0.10.6":"2026-09-23T21:42:59.679Z","0.10.7":"2026-09-24T03:45:59.852Z","0.10.8":"2026-09-24T19:14:10.229Z","0.10.9":"2026-09-24T20:40:09.082Z","0.11.0":"2026-09-25T07:03:19.271Z"},"bugs":{"url":"https://github.com/hasna/apps/issues"},"author":{"name":"Hasna"},"license":"Apache-2.0","homepage":"https://github.com/hasna/apps/tree/main/apps/hooks#readme","keywords":["claude-code","hooks","cli","typescript","bun","git-safety","code-quality","security"],"repository":{"url":"git+https://github.com/hasna/apps.git","type":"git","directory":"apps/hooks"},"description":"Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command","maintainers":[{"name":"andreihasna2","email":"andrei@hasna.com"}],"readme":"# @hasna/hooks\n\nOpen source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command\n\n[![npm](https://img.shields.io/npm/v/@hasna/hooks)](https://www.npmjs.com/package/@hasna/hooks)\n[![License](https://img.shields.io/badge/license-Apache--2.0-blue)](LICENSE)\n\n## Install\n\n```bash\nnpm install -g @hasna/hooks\n```\n\n## CLI Usage\n\n### Trash startup readiness\n\nThe bundled `trash-readiness` observer checks an installed Trash ready plan at\nsession startup. It reports a short ready or attention message. It does not\ncapture files, repair settings, retry failed requests, or authorize deletion.\nKeep the separate `trash-guard` installed and enabled.\n\nClaude and Codex use their native `SessionStart` event for startup, resume,\nclear and fork. Compaction does not repeat this check. Configuration and native\nexecution are separate: successful setup leaves `nativeAdoptionVerified:false`\nuntil the actual consumer has been exercised.\n\n```bash\nhooks safety startup registration-plan --target claude\nhooks safety startup registration-apply --target claude --expected-plan-digest SHA256\n\nhooks safety startup registration-plan --target codex\nhooks safety startup registration-apply --target codex --expected-plan-digest SHA256\nhooks safety startup trust-plan --target codex --codex-command /absolute/native/codex --cwd /absolute/project\nhooks safety startup trust-apply --target codex --codex-command /absolute/native/codex --cwd /absolute/project --expected-plan-digest SHA256\n```\n\nAfter registration and trust, use Trash's station setup flow to produce a new\nready plan. Native configuration changes must precede this plan because its\ndigest binds the selected configuration. Bind that plan explicitly:\n\n```bash\nhooks safety startup bind --target codex --binding /absolute/binding.json --expected-binding-sha256 absent\nhooks safety startup check --target codex\n```\n\nThe binding schema is `hasna.hooks.trash-readiness/v1`. It contains the exact\nprovider and home, `runtime:{path,sha256}`, `trash:{root,version,cliSha256}`,\n`plan:{path,sha256}`, and `timeoutMs` (1000–15000). Paths are absolute; the\npackage and plan must be inside that home. The installed binding lives at\n`~/.hasna/hooks/native/trash-readiness/<provider>.json`. Updating it requires its\ncurrent digest; the writer preserves an immutable predecessor, intent and\nreceipt. Response loss requires inspection before another explicit operation.\nGeneric Hooks registry authentication is unchanged.\n\nThe `@hasna/hooks/native-readiness` export also exposes the observer for harness\nintegrations as `await runTrashReadiness(provider, { signal })`. The observer\nsupervises only its newly created check process group, including nested clients,\nand cleans it up on completion, cancellation or timeout. Selecting `sumi`\nidentifies that consumer; it does not register\na Sumi lifecycle event. A Sumi adapter must call the observer through its own\nsupported startup path and verify delivery separately.\n\n```bash\nhooks --help\n```\n\n- `hooks install`\n- `hooks list`\n- `hooks search`\n- `hooks remove`\n- `hooks categories`\n- `hooks info`\n- `hooks doctor`\n- `hooks run`\n\n## Compact Output\n\nCLI commands default to compact, agent-friendly output. List and search commands\nshow essential fields, cap terminal rows, and print hints for deeper inspection.\nUse detail flags when you need more context:\n\n```bash\nhooks list                  # compact, capped list\nhooks list --all            # show all rows\nhooks list --verbose        # include descriptions\nhooks search git --limit 5  # cap result rows\nhooks info gitguard         # full metadata for one hook\nhooks docs gitguard         # README preview\nhooks docs gitguard --verbose\nhooks list --json           # stable machine-readable full data\n```\n\nMCP tools follow the same gradual disclosure pattern: list/search/log/profile\ntools return compact summaries by default, while explicit flags such as\n`compact:false`, `verbose:true`, or a detail tool like `hooks_info` return full\nrecords.\n\n## Recoverable deletion guards\n\n```bash\nhooks safety install trash-guard --target codex\n# Or --target claude. Use --overwrite to update an existing registration.\n```\n\nThis installs a bundled, synchronous safety capability without requiring a Hooks\nregistry credential. Generic `hooks run`, registry commands, and custom hooks keep\ntheir existing authentication requirements. The Trash guard also evaluates the\nprotected repository policy, so its handoff cannot silently permit deletion.\n\nThe installed command pins its absolute Bun runtime and complete worker bundle.\nIt verifies those bytes before execution and blocks startup failures, malformed\ninput/output, changed files and deadlines. Native execution has a ten-second\nbudget; its own watchdog refuses after six seconds. Updating Bun or Hooks requires\nreinstalling the registration and reviewing the new native trust definition. Unsafe\ninstallation paths are refused before settings are written. Codex also requires\ntrust through `/hooks`; registration alone does not prove interception.\n\nFor the default global Claude settings path, a managed Skills installation\ncoordinates hook changes and discovery witnesses in one guarded update. Existing\ndrift or concurrent edits refuse installation before an uncoordinated write;\nstandalone installation remains available when no Skills policy exists. This\ncoordination includes project or custom paths resolving to that same file; it\ndoes not cover separate project settings files.\n\nSupported controls cover shell `rm` rewrites through a verified `@hasna/trash`\nguard, explicit unsupported delete commands, and whole-file `apply_patch`\ndeletions. They do not intercept arbitrary filesystem syscalls, application APIs,\nor in-place edits. A missing or unauthenticated Trash client refuses the rewritten\noperation; it never falls back to raw removal. Configure hosted Trash and verify a\ndisposable capture/restore before relying on recoverable deletion.\n\n`hooks safety inspect` is a small, read-only installation check. It returns\ncompact JSON with the verified Trash path and version, or a fixed failure code\nsuch as `unsafe_executable`, `unsafe_directory`, `unsafe_manifest` or\n`identity_failed`, and exits nonzero on failure. It checks package identity,\nownership, permissions and a bounded credential-free protocol probe; it does not\ncontact the registry or Trash API. Use it after setup and package upgrades.\nRepair unsafe installation permissions with a verified package installer, then\ncheck again. This check alone does not prove hosted authentication, native hook\ntrust or a running agent's interception.\n\n## Planned safety registration\n\nFor repeatable global setup, use the owning installer through its plan/apply\ncommands. Planning leaves native settings unchanged and returns a compact digest.\n\n```bash\nhooks safety registration-plan --target codex\nhooks safety registration-apply --target codex --expected-plan-digest PLAN_SHA256\n# The same two commands support --target claude.\n```\n\nApply checks the exact predecessor, retains an owner-only original and intent,\nand reads back the result. An identical registration returns unchanged without\nrewriting its settings. The planner honors `CODEX_HOME` and `CLAUDE_CONFIG_DIR`;\nconflicting Hooks path overrides refuse. Missing native settings directories are\ncreated only on apply. Disabled or asynchronous guards, unsafe paths, duplicate\nJSON keys and numbers that cannot be preserved exactly refuse before a write.\nManaged default Claude settings continue through Skills' coordinated writer.\n\nThe SDK exports `planNativeSafetyRegistration` and\n`applyNativeSafetyRegistration`. Both return `nativeAdoptionVerified: false`.\nA changed or uncertain apply requires a fresh read-only plan and inspection of\nits recorded operation; no automatic retry or direct overwrite is performed.\n\nAfter registration, Codex trust uses its supported native configuration writer:\n\n```bash\nhooks safety trust-plan --target codex --cwd /path/to/project --codex-command /absolute/path/to/native/codex\nhooks safety trust-apply --target codex --cwd /path/to/project --codex-command /absolute/path/to/native/codex --expected-plan-digest PLAN_SHA256\n```\n\nThe exact definition is verified before trusting and enabling only that guard.\nUnrelated configuration is preserved, and an already trusted, enabled guard\ndoes not cause a write. A disabled native hooks feature is a refusal, not an\nimplicit feature change. Neither registration nor trust proves that an existing\nagent has adopted the change.\n\nFor Claude, `hooks safety verify --target claude --cwd /path/to/project` checks\nthe selected settings and bundled supervisor. Its result explicitly leaves\nruntime-policy verification, native discovery and native adoption false;\nMDM/server policy, workspace trust and launch flags require native acceptance.\n\n\n## Codex safety readiness\n\n```bash\nhooks safety verify --target codex --cwd /path/to/project --codex-command /absolute/path/to/native/codex\n```\n\nThis bounded, read-only check starts its own fresh Codex app-server and asks the\nnative consumer for the selected project's hook definitions and feature state.\nIt requires exactly one enabled, trusted, synchronous bundled Trash guard, checks\nits installed supervisor by classifying data, and verifies that the native\ndefinition stayed unchanged. It returns compact JSON and a nonzero exit on\nmissing, disabled, untrusted, changed or unsafe state. No deletion is executed.\n\nThe command accepts a native Linux ELF or macOS Mach-O executable for the host\narchitecture (arm64 or x64); script launchers are refused before execution. When\nCodex is installed through npm, pass the platform package's native binary rather\nthan its JavaScript launcher. Executable ownership, permissions, ancestry and\nbytes are checked. Supported protocol versions are 0.153.0, 0.154.0, 0.155.0,\n0.155.1 and 0.156.1; other versions refuse pending compatibility validation.\nThe version probe has a five-second forced timeout and native discovery a\nfifteen-second lifetime budget. Neither step restarts an existing agent.\n\nSuccess reports `nativeDiscoveryVerified: true`, `guardVerified: true` and\n`nativeAdoptionVerified: false`. It does not enroll trust, change configuration,\nauthenticate Trash, verify MCP or Instructions, or prove interception by an\nalready-running session. Complete those separate setup checks and a fresh native\ninterception proof before declaring station support. Use this small readiness\ncheck after installation, meaningful upgrades and during fresh-agent startup;\nnever substitute repeated deletion smoke tests for a startup check.\n\n## Optional Mementos prompt context\n\n`hooks install mementos-context --target codex` registers a native prompt hook.\nEnable it in the calling shell with `HOOKS_MEMENTOS_ENABLED=1`; set\n`HOOKS_MEMENTOS_PROJECT` to an existing Mementos project. Provider judgments are\nseparately opt-in. The hook returns bounded, quoted memory data and continues\non errors. See [setup, scope and provider options](hooks/hook-mementos-context/README.md).\nCodex requires review and trust of the exact registration through `/hooks`.\nClaude Code and Codewith also support this hook through their explicit targets.\n\n## Codewith-native hooks\n\n@hasna/hooks includes unprefixed Codewith-native hook names:\n\n- `session-start` — `SessionStart` digest and additional context.\n- `prompt-guard` — `UserPromptSubmit` guard for pasted fake policy/freeze/run-this-now content.\n- `pre-bash` — `PreToolUse` Bash gate for staged secrets scans, scoped destructive-operation blocks, and risky-op comms checks.\n- `worktree-guard` — `PreToolUse` guard for managed repos worktree boundaries and file-tool-like payloads touching protected Hasna scopes.\n- `stop-sync` — `Stop` turn-end heartbeat/evidence best effort.\n- `knowledge-context` — deterministic Knowledge context packs for `SessionStart`, `UserPromptSubmit`, and `SubagentStart`.\n\nFor Codewith, the installer is renderer-safe by default: it emits a TOML\nfragment instead of mutating managed `~/.codewith/config.toml`.\n\n```bash\nhooks install session-start prompt-guard pre-bash worktree-guard stop-sync knowledge-context --target codewith\n```\n\nThe scoped destructive-operation guard does not block every cleanup command. It\nblocks resolved shell/file-tool targets that threaten `/` or a system root\n(`/usr`, `/etc`, `/bin`, `/lib`, `/var`, `/boot`, `/home`, `/Users`, and the\nother FHS and macOS equivalents), `~/.hasna`, configured workspace roots, Hasna\ndivision/scope roots, or active repo/worktree roots, including recursive `rm`,\n`rsync --delete`, destructive `find`, and destructive `git clean` / `git reset\n--hard` forms.\n\nIt also blocks by *shape*: a destructive target containing a command\nsubstitution or variable expansion immediately followed by `/` is checked as the\nshell would render it if that expansion returned empty, so\n`rm -rf \"$(anything)\"/*` and `rm -rf \"$VAR\"/*` are refused whatever the\nexpansion is. Wrapped forms (`bash -c`, `su -c`, `eval`, `ssh host '…'`) are\nunwrapped first. See [`hooks/pre-bash/README.md`](hooks/pre-bash/README.md) for\nthe full rules, the deliberate exemptions (`${VAR:?}`, bare `\"$(cmd)\"` with no\ntrailing separator), and the recommended safe form.\n\nApply that fragment through `configs` or the managed config renderer. A\ndirect write path exists only for explicit local/test use:\n\n```bash\nhooks install knowledge-context --target codewith --apply-codewith --codewith-config /tmp/codewith-config.toml\n```\n\n## Custom and remote hooks\n\nA hook is defined by a manifest — `{ name, version, description, events, script, args?, timeout_ms? }` — where `script` is a relative path or inline content. Hooks come from three sources: the bundled registry, a user custom directory, or a remote registry.\n\n`timeout_ms` is an optional positive integer (milliseconds). **Omit it for no timeout.** A timeout of 0 is never a real value: a manifest or MCP call that passes `0` (or a negative value) is rejected, and the SDK treats a non-positive option as not provided — falling back to the manifest value, or to no timeout when the manifest has none. So `timeout_ms: 0` can never mean \"kill immediately\"; either a positive bound applies or there is no bound at all.\n\n**Install custom hooks** from a local directory, a git URL, or a manifest URL:\n\n```bash\nhooks install ./my-hook            # directory with manifest.json\nhooks install git@github.com:org/hook-repo.git\nhooks install https://example.com/hooks/my-hook/manifest.json\n```\n\nCustom hooks land in `~/.hasna/hooks/hooks/<name>/`. A custom hook with the same name as a bundled hook takes precedence (visible in `hooks info <name>`).\n\n**Trust model.** Every hook script is pinned by sha256 in `~/.hasna/hooks/hooks.lock` and the SQLite `hooks` table. `hooks run` verifies the script hash before executing; if the script changed, the run is refused:\n\n```bash\nhooks trust <name>   # re-pin the current script content\nhooks update         # re-register hooks and refresh pins\n```\n\n**Registry server.** `hooks serve` exposes the local store over HTTP — catalog, artifacts, and the published lock:\n\n```bash\nhooks serve --port 39428            # publish key resolves from the @hasna/contracts chain per request\n# GET /health, GET /api/v1/catalog, GET /api/v1/hooks/:name/:version,\n# PUT /api/v1/hooks (publish, requires the key), GET /api/v1/lock\n```\n\n**Registry selection (fail closed, strict pair).** The remote-registry authority and its credential resolve through the ONE `@hasna/contracts` client chain (2026-09-04 adoption, hasna/apps#1720), fresh on every call, as a STRICT pair: a URL without a key is a refusal, never half-open progress, and a key alone is a complete configuration (it resolves the fleet gateway `https://api.hasna.com/hooks`). The chain, in order: an explicit `--api-key`/`--profile` argument; `HASNA_HOOKS_API_KEY_OVERRIDE` / `HASNA_PROFILE` / `HASNA_HOOKS_API_KEY_REF`; the macOS Keychain items `hasna.credentials.hooks.api-key` / `.api-url`; `~/.hasna/hooks/config/credentials` (owner-only 0400/0600); then `HASNA_HOOKS_API_URL` / `HASNA_HOOKS_API_KEY` (the unprefixed `HOOKS_*` spellings remain only as the resolver's silent alias fallback). The retired locations (`~/.hasna/fleet-env`, `~/.hasna/cloud`, `~/.config/hasna`, `$XDG_CONFIG_HOME`) and the retired `~/.hasna/hooks/config.json` key store are never read, and no `*_MODE` switch exists. Without a resolved credential, the CLI **fails closed**: registry commands refuse to run rather than silently serving the bundled catalog and local SQLite store, and they name every tier they consulted in the error. Local mode (bundled registry + local store) is an explicit opt-in:\n\n```bash\nHASNA_HOOKS_LOCAL=1 hooks list      # canonical local opt-in\nHOOKS_LOCAL=1 hooks list            # accepted alias\n```\n\nLocal mode is answered BEFORE the resolver runs (so an unhosted run touches neither the Keychain nor the credential file) and says so on stderr, once per process.\n\n**Hosted is a route, not just admission (owner ruling 2026-09-07).** Once a registry credential resolves — the env pair, the Keychain item, or the credentials file — the on-box SQLite store is refused for the whole process: `hooks log *`, `hooks storage *`, the MCP `hooks_log_*` / `storage_*` / `send_feedback` tools and the hook-event writer answer `REMOTE_COMMAND_UNSUPPORTED` (naming the opt-in) instead of reading or creating `~/.hasna/hooks/hooks.db`. Pins and trust keep working on the hosted route through `hooks.lock` alone; the SQLite `hooks` table is a local-mode mirror.\n\n**`hooks run` decides its route like every other client verb.** Under the explicit opt-in it executes the hook and records the event in the on-box store (the child hook sees `HOOKS_LOCAL`); on the hosted route it executes the hook but refuses the event write loudly (one stderr line — the hosted registry has no event route); with nothing configured it exits 1 with one line naming the credential tiers and the opt-in, and creates nothing. Agents that wire `hooks run <name>` into their settings on an unconfigured machine therefore need either a registry credential or `HASNA_HOOKS_LOCAL=1` in the hook's environment.\n\nSurfaces that never open the client store and are server/operator-only by design need neither setting: `serve` (`hooks-serve`), `cf`, `migrate`, `init`, `profile-export`/`profile-import`, `channels`, `events`, and `--help`/`--version`. `hooks mcp` and the `hooks-mcp` bin decide their authority themselves before any transport connects (below).\n\n**MCP server (`hooks-mcp`).** One package, four surfaces: the stdio MCP server is the `hooks-mcp` bin (34 tools).\n\n```bash\nbun install -g @hasna/hooks          # then \"command\": \"hooks-mcp\" in your agent's mcpServers\nbunx -p @hasna/hooks hooks-mcp       # no global install\nhooks mcp --stdio                    # same server through the CLI; --sse / --http for the shared transports\n```\n\n`hooks-mcp` fails closed at startup: with nothing configured it prints one `REMOTE_API_*` line naming the credential tiers and `HASNA_HOOKS_LOCAL=1`, exits 1 before answering `initialize`, and creates no file. Under a resolved credential it serves the catalog/install tools and the local-only tools refuse with `REMOTE_COMMAND_UNSUPPORTED`; under the opt-in it serves the on-box store and prints `hooks: LOCAL mode — …` on stderr once.\n\n**SDK (`@hasna/hooks/sdk`).** The importable surface is a hosted registry client that resolves its credential through the same chain and throws `REMOTE_API_*` when nothing resolves — it never returns a client bound to a local file, and it refuses `HASNA_HOOKS_LOCAL=1` by name (the on-box store is the CLI's). The bundle is self-contained: node builtins only, no `bun:sqlite`.\n\n```ts\nimport { createHooksClient } from \"@hasna/hooks/sdk\";\n\nconst registry = createHooksClient();          // throws REMOTE_API_CONFIG_MISSING with nothing configured\nconst catalog = await registry.catalog();      // GET <origin>/api/v1/catalog\nconst lock = await registry.lock();            // GET <origin>/api/v1/lock\nconst artifact = await registry.artifact(\"gitguard\", lock.hooks.gitguard.version);\n```\n\n```bash\nhooks init --cloudflare --api-url https://registry.example.com --api-key <vault-key-name>\nHASNA_HOOKS_LOCAL=1 hooks sync      # local workflow: bundled catalog into the local store\nHASNA_HOOKS_LOCAL=1 hooks sync --dry-run  # print the plan without changing anything\n```\n\n`hooks init --cloudflare` no longer writes a config file — `config.json` is retired (hasna/apps#1720). It prints the exact configuration to apply: set `HASNA_HOOKS_API_URL` and `HASNA_HOOKS_API_KEY_REF` (the vault key NAME, never the value) in the environment, or store the Keychain items / credentials file:\n\n```bash\nexport HASNA_HOOKS_API_URL=https://registry.example.com\nexport HASNA_HOOKS_API_KEY_REF=<vault-key-name>   # resolved through the vault at request time\nsecrets exec <vault-key-name> --as HASNA_HOOKS_API_KEY -- hooks serve\n```\n\nThe owner-only `~/.hasna/hooks/config/credentials` file also accepts a reference:\n\n```dotenv\nHASNA_HOOKS_API_URL=https://registry.example.com\nHASNA_HOOKS_API_KEY_REF=your-team/hooks/live/api-key\n```\n\nKeep this file at mode `0400` or `0600`, and configure Secrets through its normal independent credential resolver. Hooks resolves the selected reference through the Secrets SDK for each registry request and each server publish-key check. References retain their existing precedence: a locked Keychain remains a refusal ahead of a file reference, and a missing reference never falls through to a stale literal key. A file cannot contain both a literal key and a reference.\n\n`hooks list` displays catalog metadata and does not prove that the remote registry is reachable. Use `hooks sync --dry-run` to exercise registry reads without changing installed hooks. SDK consumers use `createHooksClient()`; callers working directly with transport metadata must await `resolveHooksRequestAuthority()` before sending a request. The server uses `resolveHooksServePublishKeyAsync()` for references.\n\n**Cloudflare provisioning.** `hooks cf deploy` creates the D1 database and R2 bucket via the Cloudflare API, then prints the exact wrangler commands for the worker upload (the worker needs the workerd target, which only wrangler can bundle):\n\n```bash\nexport CF_API_TOKEN=...   # resolve from the vault, never paste the value\nhooks cf deploy --account-id <id> --dry-run   # plan first\nhooks cf deploy --account-id <id>\n```\n\nThe worker (`src/cf/worker.ts`) implements the same API routes against D1 + R2, with artifacts at `hook_artifacts/<name>/<version>.json`. See `src/cf/wrangler.toml.example`.\n\n## Storage\n\nWhen local mode is explicitly selected, Hooks stores data in `~/.hasna/hooks/`\nand uses SQLite for hook event history. The package owns its database schema and\nmigrations; it does not depend on the deprecated shared runtime or its CLI.\nThe repo includes its own PostgreSQL migration definitions for the optional\n`hooks storage push|pull|sync` commands. Use the `hooks log` commands to inspect\nlocal hook event data.\n\n```bash\nhooks storage status --json\nHASNA_HOOKS_DATABASE_URL=postgres://... hooks storage push --tables hook_events,feedback --json\nhooks storage pull --json\nhooks storage sync --json\n```\n\nConfigure database storage with `HASNA_HOOKS_DATABASE_URL` or fallback\n`HOOKS_DATABASE_URL`.\n\n### Storage backend\n\nHooks storage has one setting with two values: **which data backend**, not where\nanything is deployed.\n\n| `HASNA_HOOKS_STORAGE_BACKEND` (fallback `HOOKS_STORAGE_BACKEND`) | meaning |\n| --- | --- |\n| `sqlite` | the on-box SQLite file in `~/.hasna/hooks/` (default) |\n| `postgresql` | the PostgreSQL database named by `HASNA_HOOKS_DATABASE_URL` |\n\nLeave it unset and the backend is inferred exactly as before: `postgresql` when a\ndatabase URL is configured, `sqlite` otherwise. An unrecognised value is an\nerror, not a silent fall back to SQLite.\n\nThe former deployment-mode variables `HASNA_HOOKS_STORAGE_MODE` and\n`HOOKS_STORAGE_MODE`, and their `local` / `hybrid` / `remote` / `self-hosted` /\n`cloud` values, are **retired**. They are not read; setting one raises an error\nnaming the replacement variable and the backend to use (`local` became `sqlite`,\neverything else became `postgresql`). Deployment location was never a property of\nthe data layer, so it is no longer expressed as one.\n\n## Environment variables\n\n| Variable | Purpose |\n| --- | --- |\n| `HASNA_HOOKS_API_URL` | Registry URL (strict pair — requires a credential with it). Fallback aliases are not read; the unprefixed `HOOKS_API_URL` survives only as the resolver's silent alias. `HASNA_HOOKS_REGISTRY_URL` / `HOOKS_REGISTRY_URL` are retired. |\n| `HASNA_HOOKS_API_KEY` | Registry key, resolved through the @hasna/contracts chain (below disk, above nothing else). Unprefixed `HOOKS_API_KEY` is the silent alias. |\n| `HASNA_HOOKS_API_KEY_OVERRIDE` | Deliberate per-run key override (tier 1). |\n| `HASNA_HOOKS_API_KEY_REF` | Vault ITEM KEY name; resolved through `@hasna/secrets` at request time. Never a value. |\n| `HASNA_PROFILE` | Selects which identity profile the chain reads. |\n| `HASNA_HOOKS_LOCAL` / `HOOKS_LOCAL` | Explicit opt-in to local mode (bundled registry + on-box SQLite store); answered before the resolver runs and printed on stderr. The ONLY way any client surface (`hooks`, `hooks-mcp`, `hooks run`) opens `hooks.db`; a configured registry credential outranks it. |\n| `HASNA_STATION` | Keychain account when reading `hasna.credentials.hooks.*`. |\n| `HASNA_HOME` / `HASNA_CONFIG_HOME` | Move the disk credential root (`<…>/hooks/config/credentials`). `~/.hasna/fleet-env`, `~/.hasna/cloud`, `~/.config/hasna` and `$XDG_CONFIG_HOME` are never read. |\n| `HASNA_HOOKS_DATA_DIR` / `HOOKS_DATA_DIR`, `HASNA_HOOKS_HOME` / `HOOKS_HOME`, `HASNA_HOOKS_DB_PATH` / `HOOKS_DB_PATH`, `HASNA_HOOKS_LOCK_PATH` / `HOOKS_LOCK_PATH` | Local store locations (data root, DB, lock). |\n| `HASNA_HOOKS_DATABASE_URL` / `HOOKS_DATABASE_URL`, `HASNA_HOOKS_STORAGE_BACKEND` / `HOOKS_STORAGE_BACKEND` | Optional PostgreSQL data backend (see Storage). `HASNA_HOOKS_STORAGE_MODE` / `HOOKS_STORAGE_MODE` are retired and raise an error. |\n\n## Runtime model\n\nThis package is an npm CLI (`hooks`), a stdio MCP server (`hooks-mcp`), a local\nregistry server (`hooks-serve`) and an importable hosted client (`@hasna/hooks/sdk`).\nInstalling and running hooks needs nothing deployed anywhere, but the on-box SQLite\nstore is never a silent default: every client surface either resolves a registry\ncredential (hosted route — no local store is opened) or is told `HASNA_HOOKS_LOCAL=1`\n(local mode — announced on stderr); with neither it exits non-zero and creates nothing.\n\n## Required Sumi safety binding\n\n`hooks safety install trash-guard --target sumi` registers the bundled composite\nguard for Sumi's required native adapter. `hooks safety verify --target sumi`\nchecks the exact saved supervisor by classifying a synthetic removal without\ncreating a file or executing the rewritten command. Both\ncommands are credential-free and return compact JSON. Verification explicitly\nreports `nativeAdoptionVerified: false`: a fresh native Sumi tool invocation is\nstill required to prove that the installed harness uses this binding.\n\nThe binding is provisioned from the package's own install, upgrade and safety\nsurfaces, so a rollout cannot leave Sumi's fail-closed check unbound:\n\n- the package lifecycle script (`postinstall`) provisions it for a packaged\n  install — a copy inside a `node_modules` directory, never a source checkout;\n- `hooks install` and `hooks upgrade` apply the same step after a successful\n  hook install or package upgrade, and report it as `sumiBinding` in `--json`;\n- `hooks safety provision` runs it on demand and is credential-free.\n\nEvery surface is idempotent and shares one policy: a missing binding is created,\na byte-identical one is written nowhere, a different binding that still verifies\nis left intact, and one whose pinned runtime or worker no longer verifies (an\nupgrade rewrote the worker, or the runtime prefix was pruned) is re-registered\nwith the previous record preserved beside it as `<path>.before-<sha256>`. An\nunreadable or unrecognized record is refused rather than overwritten, and\nprovisioning never fails the calling command — it reports a stable `code`,\nbecause an unavailable Trash guard must not break a hook install. bun blocks\nlifecycle scripts for untrusted dependencies and `--ignore-scripts` skips them,\nso the CLI surfaces carry the same policy wherever the lifecycle script does not\nrun. A harness rollout that installs this package with scripts disabled must run\none of those surfaces; that is the harness owner's half of this contract.\n\nThe binding pins the absolute paths and sha256 of the Bun runtime and the worker\nbundle as they exist when it is registered, and every evaluation re-verifies\nthose exact bytes. A worker inside a tree a package upgrade rewrites in place —\nbun's global install root, its cache, or an isolated `node_modules/.bun/…` store —\nis therefore only valid until that tree is upgraded; the next rewrite refuses\nevery command until provisioning runs again. Provisioning still closes the\nimmediate gap (an unbound station has no shell at all) but reports it: every\nresult carries `durable`, and a false value prints the repair step. Provision\nrollouts from a stable, versioned install tree (for example the fleet's\n`~/.hasna/hooks/runtime/<version>-copyfile` layout) and re-run\n`hooks safety provision` after upgrading a tree the binding points at.\n\nThe owner-only `~/.hasna/hooks/native/sumi-trash-guard.json` pins the supervisor's\nruntime, worker, home and PATH. Owner and mode are part of the trust decision: a\nrecord that is not owned by the current user, or that group or others can read or\nwrite, is refused with the failing property named — never trusted, adopted or\nsilently replaced — because a rewritable binding can point the supervisor at a\ndifferent worker. Identical setup is a no-op. An upgrade requires\n`--expected-binding-sha256 <current-digest>` and preserves the previous record.\nAn interrupted lock or unexpected current record requires reconciliation; setup\ndoes not overwrite it. This file is native configuration, not a Hooks app store.\nSetup checks the supervisor's bound PATH before registration; verification checks\nthe same readback digest before and after the probe. Package-manager bin file\nsymlinks are supported, but symlinked or writable PATH directory ancestry refuses\ninstead of hiding an unsafe parent through realpath resolution. The published\nTrash script's Bun interpreter and all preceding PATH directories are checked\nbefore its identity probe runs; unsafe or unsupported interpreter resolution\nreports `unsafe_interpreter` without executing it.\n\nNative adapters import `@hasna/hooks/native-safety` and pass the final shell/patch\noperation to `evaluateNativeSafetyForExecution`, with cancellation and an explicit\nagent label. A rewrite returns the complete command, shell, resolved cwd and\nenvironment. The adapter must use those fields together, disable environment\ninheritance, and prevent later hooks from changing them. Every rewritten removal\nuses the verified absolute Bun runtime with a clean environment and project\nconfiguration, env files, macros and installation disabled. Deletions combined\nwith shell environment changes are refused; run those removals separately.\n\nUse `hooks safety verify --target sumi --execution` for a small, read-only check\nthat the saved worker supports this execution contract. A legacy worker that only\nclassifies commands cannot pass it. The compatible `evaluateNativeSafety` API and\nverification without `--execution` classify commands only; their success does not\nprove execution compatibility. Neither check runs the returned deletion, creates\na test file, authenticates Trash or proves native adoption.\n\nThe bounded agent label can identify the Sumi session in Trash's existing name\nfield; it does not invent unsupported harness/session fields. Missing or unhealthy\nbindings reject the call. This covers supported shell removal and whole-file patch\ndeletion, not arbitrary filesystem writes or plugin executor replacements.\nInstalling the record alone does not activate a harness.\n\n## Data Directory\n\nData is stored in `~/.hasna/hooks/`.\n\n## License\n\nApache-2.0 -- see [LICENSE](LICENSE)\n","readmeFilename":"README.md"}