{"_id":"vibe-hardening","_rev":"78-55cb24734fa70dfe503c07dc02b6bc8c","name":"vibe-hardening","dist-tags":{"preview":"0.0.20-preview.0","latest":"0.4.0"},"versions":{"0.0.1-preview.0":{"name":"vibe-hardening","version":"0.0.1-preview.0","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.1-preview.0","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"025f38a0ad208bc4822b3194163cb50aca277c0d","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.1-preview.0.tgz","fileCount":4,"integrity":"sha512-UTVqZB4OJRWp6btdbiM4/JgDVSlF+GSRwI7k1MD3VitzSjJyrU1cU0IP3lO59iUc+9lKU8nW/zdJpQuVCdCYQQ==","signatures":[{"sig":"MEYCIQCzkYpwqzIeyZ22YPcuAz+QawgzlDyrGay53/QJ9G7NyQIhAIdtRzy3Vw8kuXfq2j2vXVpW+m/TAzse266Rom0t/6KH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4345},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"cf0321ba53db9574ad084cc03b402bf02b67b39d","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"zod":"^3.24.1","yaml":"^2.6.1","ts-morph":"^24.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.1-preview.0_1776455486842_0.6680256131938598","host":"s3://npm-registry-packages-npm-production"}},"0.0.2-preview.0":{"name":"vibe-hardening","version":"0.0.2-preview.0","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.2-preview.0","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"7db75e63c959044dd99a758af1d7547b4fdc2272","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.2-preview.0.tgz","fileCount":56,"integrity":"sha512-Tj4Uz6sJCSyt/LjOEShvZ2PtneDpe1fpSiUli4+HNkjrwkn9o/IkYzXLfMPVtA+zAIUVOvt1411VEVozJUpZCg==","signatures":[{"sig":"MEYCIQD9T00bfULXwb0djwZwsuVnNxH+IGnATk6ZYY0yU/XDFQIhAMh3Jp8dJSWtUVBgukzY9CDBmxYERniiWyffwvAgq0fJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83216},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"89e082d4d4eb09786992301210a21652f84c967e","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.2-preview.0_1776592475214_0.5362174583787667","host":"s3://npm-registry-packages-npm-production"}},"0.0.3-preview.0":{"name":"vibe-hardening","version":"0.0.3-preview.0","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.3-preview.0","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"3dc4e867d6b3e019cf759744c154256b9f6b2e15","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.3-preview.0.tgz","fileCount":80,"integrity":"sha512-gQ/4qqr8StpSwUeHPk0YZyvsHL2M8eCKAbPH5Gqcl8QEZBJnHMFjZnd8upoEkp+HM+YIgAG91meHej5HDCbbFQ==","signatures":[{"sig":"MEYCIQCwl400aR9S9ZUw+414ZNxSol1/CfPNX5/61s7N1auv6AIhAJJiy/fKmK1pQSgrw7ianX1utbcicSMRin9a4NwcIbCb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":144885},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"18c3fe7cd7e599a86f507470e84d891b2d2bc68a","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.3-preview.0_1776593811047_0.2816611894423917","host":"s3://npm-registry-packages-npm-production"}},"0.0.3-preview.1":{"name":"vibe-hardening","version":"0.0.3-preview.1","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.3-preview.1","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"a6f04ab252f3c3bdf22c8f6ed6fa442c9754b3c1","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.3-preview.1.tgz","fileCount":80,"integrity":"sha512-qF8uUgjsywGE7Ycq3AbOQkMK3RskiFqEUkZnX9ZJ4eQiNnvI3rb5zmRbeAoEasT1hVhPsTDdkgxQknsNMIbJmA==","signatures":[{"sig":"MEYCIQCROgk4q8Tm3iEEU+yBxbxSfaBOIgTForWDuOw79u/5uwIhAMNygOEtFwY8xRPdXrb5SIjM7zMXE5/P7vwx3p8C6rvw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":150931},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"18c3fe7cd7e599a86f507470e84d891b2d2bc68a","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.3-preview.1_1776594196493_0.9081875833395481","host":"s3://npm-registry-packages-npm-production"}},"0.0.3-preview.2":{"name":"vibe-hardening","version":"0.0.3-preview.2","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.3-preview.2","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"5279ac301ff5c69a0b260f557121f642be319520","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.3-preview.2.tgz","fileCount":84,"integrity":"sha512-QBlsuUtsmQIFP3FtmXw/oxjuGfBsOuf+zsGTAq27n35gfQMyzXSkDlEOVfnta5svx/YuifHNxfAXxQKKgFyxKA==","signatures":[{"sig":"MEUCIBKsVuHn3G78R1Q7haRpXi8JeagNQrWrtuBkGD+HrpjsAiEAykCEzfzOvSzmgbv9ylg/2K6W+U3yp3vATyJqfV98Wu0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":169414},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"6f7572d66937b5cc3932b750cb2f94a6b7d52f31","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.3-preview.2_1776598517346_0.6996774827812775","host":"s3://npm-registry-packages-npm-production"}},"0.0.4-preview.0":{"name":"vibe-hardening","version":"0.0.4-preview.0","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.4-preview.0","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"fea6181efa1254306ad838f1ece07902c9771b8b","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.4-preview.0.tgz","fileCount":100,"integrity":"sha512-ax/d03uJaLASNXOP62CUgHbBWItKMzWmpQmBVRV4A8gTTyTE1xNjBmXAaUYI8EdmaFGBX5jtCGgfD4idd/Ij+Q==","signatures":[{"sig":"MEQCICpRuKMj8pBWsyU0DXtk6nFbcu6gcs+21oslqLqka9REAiABV9n8cRirzF1SbqPeHLl3i8/Ep6Fc/2EmM3RmktoZrw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":207227},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"d5d90809aea84c2f83b4142c4b346dbd928dff87","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.4-preview.0_1776600664917_0.4341250623710955","host":"s3://npm-registry-packages-npm-production"}},"0.0.4-preview.1":{"name":"vibe-hardening","version":"0.0.4-preview.1","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.4-preview.1","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"a388008a034992d0b669d55783d6f17bebf266e2","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.4-preview.1.tgz","fileCount":100,"integrity":"sha512-+A6dIVJt/PX5Sa2Rh1zgtzhCxH2ZoNk5gaMSyC9/Vgf7XavadC4xB9G5ycZSP7ENKajSC/FAUPnU7vVyQFZ+SA==","signatures":[{"sig":"MEYCIQDD50y1Q4NHhjAyZiGSgGJ3QB/fZfpkTdnOdAUQ5li8dQIhAMrLfisva1jyU/1v7j9vcZZnasypZSmKuviWgtU0wQXq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":211442},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"f220bbe2f00b4b4a78d2c88236aa6ced4780797c","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.4-preview.1_1776605162383_0.47567713692685176","host":"s3://npm-registry-packages-npm-production"}},"0.0.5-preview.0":{"name":"vibe-hardening","version":"0.0.5-preview.0","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor","python","django","flask","fastapi"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.5-preview.0","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"87f75bbd67967f25caecc3a330c80377f5a65629","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.5-preview.0.tgz","fileCount":108,"integrity":"sha512-fBSqnu7G7oh72/xQc1VY0XtJt6gRbIWn9K7un4dXBEBZjJABzScQzJoywC9lyJZlXfV1CcNL29HJFh6lru5+oQ==","signatures":[{"sig":"MEUCIBosnPxYLW4MWsx4aDnvNhvZF/mbHyVhTUxcCPVSrPPiAiEAwbINhrwCrjs6xaKbx+yUvarNaC2d3daAdfTFhir7hC0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":228770},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"0f00de4f9c5041f45fa31c1d2639573b5ef2d196","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.5-preview.0_1776612906116_0.016486057534579546","host":"s3://npm-registry-packages-npm-production"}},"0.0.5-preview.1":{"name":"vibe-hardening","version":"0.0.5-preview.1","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor","python","django","flask","fastapi"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.5-preview.1","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"fe37acbef9140852b836d2230d30d28ae7b556c2","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.5-preview.1.tgz","fileCount":108,"integrity":"sha512-7QB8k/HDUWEcvfdcDVksKNAp07qtX7iwygAcu4XDJ1Q51ywWWiGTlrJ3jfp/F2nq/Azd+LBEvQGBJxr5ClrE6g==","signatures":[{"sig":"MEUCIQD7ruUt0gIn7gstj4iJKwurX2Ig4SmDzUEGss5jf4Ep2gIgHyL6bHYkiPVzLUjjnWp3NPQ3P3ZHNAlMOFqorKTc0AI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":229291},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"a8dbec3660eaf05881415a3da4ea1d6c0b2910d3","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.5-preview.1_1776613254840_0.8879584675237795","host":"s3://npm-registry-packages-npm-production"}},"0.0.5-preview.2":{"name":"vibe-hardening","version":"0.0.5-preview.2","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor","python","django","flask","fastapi"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.5-preview.2","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"c44fa577bbd044a11900efad083d28dd26d1ee91","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.5-preview.2.tgz","fileCount":108,"integrity":"sha512-9ax5RV/Wi+/ujmWjxt7EfaNBRVi0VKaATEgaFSbBtg+5g5AXc3j1ocClAXppnbxzN6YMo0q9hZRxGs7S+4Mm6Q==","signatures":[{"sig":"MEYCIQCVPHgmapUjf8WbwwVTtPZaQ1eDcCtEVccs41rsVWkbnAIhAN4Yqpz3sQaZKw7+AUPu4U+09np3SX8vCCDabPdJLLei","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":230103},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"e40ebeb82ee5da4344075269bfea6f4106b6f9d6","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.5-preview.2_1776614277707_0.11299344898794539","host":"s3://npm-registry-packages-npm-production"}},"0.0.5-preview.3":{"name":"vibe-hardening","version":"0.0.5-preview.3","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor","python","django","flask","fastapi"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.5-preview.3","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"5faf72aa38291714ed84291d7431124edbdfb1da","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.5-preview.3.tgz","fileCount":108,"integrity":"sha512-d+sHNpQGQEweVwfPjRyOzaJpuFZC7IjDQl8e4Da0IUR4+Hp29F/skwmxnlGmVluNuJ7kXKiaacMWFTxDRBQtLw==","signatures":[{"sig":"MEYCIQDoko+CBMwujjY78cAKUpVDYbiDtDjxUWPLzO2NdqYAvQIhAIH3UVWDNeLz7xYuQk9KdQEKWmck6ZEQrrXawkuEsM8I","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":232561},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"d7f6f4dee558e2bf9dbc972aabad1ceb73a4eaef","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.5-preview.3_1776614895146_0.3950100702386148","host":"s3://npm-registry-packages-npm-production"}},"0.0.6-preview.0":{"name":"vibe-hardening","version":"0.0.6-preview.0","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor","python","django","flask","fastapi"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.6-preview.0","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"d6cae120ffb676740fb4c5f131f63697d05c863b","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.6-preview.0.tgz","fileCount":108,"integrity":"sha512-Js8xnh0I063G0HUHloJF1QneP0/h1N04cql9ZcTQd5zkK7942hUXyPsxiSvrDd8GkEUFNexyaM7AZRdaGoAkCQ==","signatures":[{"sig":"MEQCIBjhEnpV8aRjZ/bhcZwVWoHmzr0QHLd3K9/PwZxGMxd5AiBiH/e+psPNYRJ25xEYJvFqmfPxXQ0KLGkjdx7dvdo6dg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":238702},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"c8773a07f3a118c5f3d0b7f642897870e80299e1","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.6-preview.0_1776620967617_0.6419013369334523","host":"s3://npm-registry-packages-npm-production"}},"0.0.7-preview.0":{"name":"vibe-hardening","version":"0.0.7-preview.0","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor","python","django","flask","fastapi"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.7-preview.0","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"432ba4f1bdaad8cdc91003c714f9bc43f2d16fd3","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.7-preview.0.tgz","fileCount":132,"integrity":"sha512-8gEoXRQroHO3qihlIZoRlbWreqUe8nhN23kZiSM7z9/Y6J1Mu0MGFgSNgydEBk8uGTH7RJBto/nczhOCEmvTfA==","signatures":[{"sig":"MEQCIAqVZkXpxuiDlmgVdmdi0Bm/LFN8x46hfvF4Qe5hXmaUAiBhuX/C2d6tqL/U0JVCqtA6MKzmfthQ199ixqB3G7uriA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":269882},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"0eaa596d95006318b4c059d8acca4529ceeda016","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.7-preview.0_1776678772128_0.44539970339290824","host":"s3://npm-registry-packages-npm-production"}},"0.0.7-preview.1":{"name":"vibe-hardening","version":"0.0.7-preview.1","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor","python","django","flask","fastapi"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.7-preview.1","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"a28f717107b5952dd6d32906e566ca86bd79fb2b","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.7-preview.1.tgz","fileCount":132,"integrity":"sha512-UCn+HSswVjuPgUkcOUR7i5pmGIbIPzUfxAcva3twycsfbVPn70q3kHwm8ZlV5ucWgOZqmaubiIGWFIl6kq8uIQ==","signatures":[{"sig":"MEYCIQDe3uHed3rkUFcjtqCCucLlle+TOW6O+qF1ztpPjrIsUgIhAMT5fFTk5amBXPs/x1wOgcl8tGXQc4U9JSJ1jcaE4xnl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":277015},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"0eaa596d95006318b4c059d8acca4529ceeda016","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.7-preview.1_1776697492904_0.7130879528227732","host":"s3://npm-registry-packages-npm-production"}},"0.0.7-preview.2":{"name":"vibe-hardening","version":"0.0.7-preview.2","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor","python","django","flask","fastapi"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.7-preview.2","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"d0c25e6f4d4d314417445f103af05f2161ed5d84","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.7-preview.2.tgz","fileCount":132,"integrity":"sha512-b1Km3tyZ5TrSb7WEKW4fp32KnYV3kch8cfu1RwEGU6y8ZVtym/+ltXVpUS3GqpukQemjbnxqhFVKrHxCy3RnHQ==","signatures":[{"sig":"MEQCIBMATEZr4akRZai6uZcnXqpkBBAmfSlDxXbcs7IYzxZWAiBFtONFqg6qELfnRRf3UqIOIDrHYuzTZcjS/qhreV/xEw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":282299},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"7587678f49d2345fe841ec368846a072329f6074","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.7-preview.2_1776698092580_0.6623921100849364","host":"s3://npm-registry-packages-npm-production"}},"0.0.7-preview.3":{"name":"vibe-hardening","version":"0.0.7-preview.3","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor","python","django","flask","fastapi"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.7-preview.3","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"97e9e1762e5d60c8830c20f875af1421d3e4a625","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.7-preview.3.tgz","fileCount":132,"integrity":"sha512-mfgu/WPkF25jKpf8odOUaVQKKRlyPystREpb+5nU5YmXFjJGyz5ZdJ9tGrSdZAz+wcQXM/VuT7EAtHKGkykXEQ==","signatures":[{"sig":"MEQCIC6XLm/uq/ugEWNjbbmFaW3CZ4PqThAkRtQy+jNTqiOUAiAl5+/Sa7f6Y8nY9u7tjVmAmy3LONTBqS2Z7Zwioi9PCg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":282943},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"e2be983b0f95c3ef9a7de0bc9611f83e9f182107","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.7-preview.3_1776700951250_0.42584372452590635","host":"s3://npm-registry-packages-npm-production"}},"0.0.8-preview.0":{"name":"vibe-hardening","version":"0.0.8-preview.0","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor","python","django","flask","fastapi"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.8-preview.0","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"bcd5aff6b6093ff15db6511ca6971509adfa6993","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.8-preview.0.tgz","fileCount":144,"integrity":"sha512-cZqVawawg7QFtEyxH1UEXp4v1cad+MTHtHVQ+B0JatSlmambFzpieDHCrq9ux8yR1su3daGSHWO8QtuAGXw65A==","signatures":[{"sig":"MEUCIQD57MODp33U/TIV3P5gYo1UUPrQxH0G8fcOu18GjGvr4QIgdCf03BwuNPgJ/jYIYR7dXOzZMmyT4Qu0Fmg7YaO5QqM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":299571},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"60fa6c47ecb5cb2f7fdf73c95397d263aa48f192","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.8-preview.0_1776702969501_0.2801632461879078","host":"s3://npm-registry-packages-npm-production"}},"0.0.8-preview.1":{"name":"vibe-hardening","version":"0.0.8-preview.1","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor","python","django","flask","fastapi"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.8-preview.1","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"664577837710bda182d6fbc9b6413cdd9221486d","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.8-preview.1.tgz","fileCount":144,"integrity":"sha512-LWgQe6mk8MximZ8h8Fu3yXSjU2VXrc1TlnHn62D1VtQ2jr17lb91T07cGaXkcII42nxVyBJQvANPAEevK2V/kw==","signatures":[{"sig":"MEUCIB4BXwq4z9W4ryFOrUNrsdiRyndoDXsW2/FldltTjXNIAiEAheMWUcj4ZDJimpC/SDwtlUo0L3fZ6zKeUzOiK3X1C0Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":300938},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"e4f842c3eed9eb5d99b8cc4bd8fbeb702d2d7517","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.8-preview.1_1776703332326_0.9243520435167889","host":"s3://npm-registry-packages-npm-production"}},"0.0.8-preview.2":{"name":"vibe-hardening","version":"0.0.8-preview.2","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor","python","django","flask","fastapi"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.8-preview.2","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"8bfbf129358d68e9c7b828418d535ab9d019928a","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.8-preview.2.tgz","fileCount":144,"integrity":"sha512-qKssmeUxe1FaEFDXIA6ltOXQQpxUtk0lao17njWJVPed3fzgJX+bcgjG+El5wFOJRw4OLkSore25BCgZtq4FgQ==","signatures":[{"sig":"MEUCIQCi+h2YBRFz3Rb8i5x2Z2SGhRHMO2s5kRJzh9gFr3F0tAIgKOG1isODYAuPODbLyTzo3FUbSbIszSK8TYqr1RqaZWw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":303402},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"6808a28f38e901f8ab3cd655f9bab66915572820","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.8-preview.2_1776704820096_0.3301968016238235","host":"s3://npm-registry-packages-npm-production"}},"0.0.8-preview.3":{"name":"vibe-hardening","version":"0.0.8-preview.3","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor","python","django","flask","fastapi"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.8-preview.3","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"433694d7fa28865800a6403735243904aa1aa3e6","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.8-preview.3.tgz","fileCount":144,"integrity":"sha512-JzkiNPltRt0tVzkw8qbzhzqiMoM0N8eJptIUar5uX0I+60O+6i0YrqWwrmqGAI2ZPqa4OxHAA6Uzb+b+7zJdHQ==","signatures":[{"sig":"MEYCIQDayiI9m5MATMs9zBArv4jDvoY9+unCFr4adu70pktMHAIhAJ1mG1fkO76osuBV3BUpMx3YVAa5O4SvzyqEpCf6l8Mp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":306850},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"436a6907974f4dd718478a6eb25d475aff676209","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.8-preview.3_1776708994642_0.922400696594387","host":"s3://npm-registry-packages-npm-production"}},"0.0.9-preview.0":{"name":"vibe-hardening","version":"0.0.9-preview.0","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor","python","django","flask","fastapi"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.9-preview.0","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"fd133d725d8aeacbd68630a40b7c4c236a9511b7","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.9-preview.0.tgz","fileCount":148,"integrity":"sha512-55io+89RJADqu94jgLQjHcXaXyzLisatKGsvH+I/ATgh46t0l6B4Tt8+TCdXMG5JenLD7XBH8GfUBRtlbJsNcQ==","signatures":[{"sig":"MEYCIQCg1IpquEvzFLS4xJ4h96VEHwCIPr9c5o9yUk2zwMvsPAIhAMtfUn+iCn1w5b22v0sv473vEbSLOSabxmwx4TKTWbHX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":333771},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"aad45f719d0d09688fc937d88106394d843c1336","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.9-preview.0_1776713024288_0.8225003749195521","host":"s3://npm-registry-packages-npm-production"}},"0.0.9-preview.1":{"name":"vibe-hardening","version":"0.0.9-preview.1","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor","python","django","flask","fastapi"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.9-preview.1","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"d99a6bc9e42ac831eb7f4e6637e6d9b7a73ae22d","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.9-preview.1.tgz","fileCount":148,"integrity":"sha512-m25R5f/7WxOZ7ihIl/hN8HU8I3Fb5xGdbjXn8RIaprSLck+ORROArjOK7opa7zjwTs9IBQQ9id8Yw66uQpxZgg==","signatures":[{"sig":"MEQCIE+UG8qVDBm2YegEl8AIVdK+0KE2cN/oqbnIkec6C/eoAiB5laSK6dqE1osyanEFLEA5H7BSAaCbXOOJURKXrSlCcw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":341631},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"81cdd44537e8f20aec6884475454bb5e63333ce9","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.9-preview.1_1776713539967_0.8734547025712585","host":"s3://npm-registry-packages-npm-production"}},"0.0.9-preview.2":{"name":"vibe-hardening","version":"0.0.9-preview.2","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor","python","django","flask","fastapi"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.9-preview.2","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"ae6c97bacdfc38c532bbbdc202271a4631a0fbce","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.9-preview.2.tgz","fileCount":148,"integrity":"sha512-F9zd22mZbptulHfu0BTdH65vDwYy1zxdIt6f2WkWyuyU0JlkbLC/iQHGeetVQwFS5FPrJ7VNh3Xf6V3XKo/bTg==","signatures":[{"sig":"MEQCIBbOCDLB6n5TVYYZ8+dz49oR9hT7JSntoVs6pvMnd6YVAiAgeuBI9u3L8uR5qPXWcmlzlH4fI5HIJ+kLJddxi+fY8A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":341954},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"6ea288a66b1dabe2847f743aa46ebb13b2227457","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.9-preview.2_1776714403818_0.8280042590756072","host":"s3://npm-registry-packages-npm-production"}},"0.0.10-preview.0":{"name":"vibe-hardening","version":"0.0.10-preview.0","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor","python","django","flask","fastapi"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.10-preview.0","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"0787c84bc77f4d230289a10e48bcf4938f147000","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.10-preview.0.tgz","fileCount":152,"integrity":"sha512-SDPeCVLbf+pvhD4O7IoP/f0pfpER8tPq+zGr2z59IG0zIT93nhVf0ZgQxyauksH71lUA15c1oWXYEmXLG6XT0Q==","signatures":[{"sig":"MEUCIB9y/vntoCMnKvzGcf8AcbdIoBmk7SKJKB2aTxiN/nBDAiEAu8s2MncqKJAOaDUcO6n5y7dAuM0TV2pRIVbblQMAzWw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":348910},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"0ea62216303d6ba96a40b266152a6c03385b8ab1","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.10-preview.0_1776714533607_0.8675254812709154","host":"s3://npm-registry-packages-npm-production"}},"0.0.10-preview.1":{"name":"vibe-hardening","version":"0.0.10-preview.1","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor","python","django","flask","fastapi"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.10-preview.1","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"e6e82aad72311a82b6a5aaa0e7aecefe2b7719ac","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.10-preview.1.tgz","fileCount":152,"integrity":"sha512-4lGO5ya68SrcWqz9h12j9lEityX1fm8dyVjIkezkZxucmEcXddU1L9WDXCtI+LCyQJwuEhJAQGvOFRcmlibXQQ==","signatures":[{"sig":"MEUCIBORyO9nilXUckTfJtbtHwFvvb3UKWlA04UsCTDHupbqAiEArFZGkfHi1VEHa7o6bqaVFJJGP8iu2gPv2dI/RB8SZls=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":351512},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"87d2db7e0b3b9f76a3c80ad24b69965818fc2d23","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.10-preview.1_1776715477388_0.8916589392768652","host":"s3://npm-registry-packages-npm-production"}},"0.0.10-preview.2":{"name":"vibe-hardening","version":"0.0.10-preview.2","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor","python","django","flask","fastapi"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.10-preview.2","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"24cfe5e15dd3af4c5c78d7316138d321798262b3","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.10-preview.2.tgz","fileCount":152,"integrity":"sha512-PDg7EANJrxlIJnow6zek+rHpGWDSakrxXGF+5NIPqeN6mPPytw5FTwQ8ygoc5SpxPCPuCtDbRSqhSlmiGojUJg==","signatures":[{"sig":"MEQCIFOeyLolrVTGzXNpi3DaedfL5pOvqqny/xAzwutNP/HZAiAkHUIPzw6quCRXPzmXT8IpuHmrQm7LyhDZYnGpMjkxQA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":352025},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"41550b05f0812073d0f94300d617a62bc8ee5fd2","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.10-preview.2_1776715842329_0.3818731377831863","host":"s3://npm-registry-packages-npm-production"}},"0.0.11-preview.0":{"name":"vibe-hardening","version":"0.0.11-preview.0","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor","python","django","flask","fastapi"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.11-preview.0","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"5322344151d3cbee6612c37f909a39d6932c103e","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.11-preview.0.tgz","fileCount":156,"integrity":"sha512-pHNhDCuUfcfBm9Lawc2rj9KtBw17Qa0unWOWuMn6EKV+h9cmsyoQAGUz6FajXBpE/IxfQ9g7WbC6qTMDKSnhCQ==","signatures":[{"sig":"MEYCIQDIftRpCXBXw0+LpW6Ysfzfk4F4ds0CRZJsWOPAUmN8tAIhAMOTWKv+r7xuVZEwkchM0BSDQZkluWboa3h3WtAUsuaz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":358916},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"9e1c87a3b963e5d3067894a2db5cb2a27ed7d90b","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.11-preview.0_1776716222651_0.44118412172311516","host":"s3://npm-registry-packages-npm-production"}},"0.0.11-preview.1":{"name":"vibe-hardening","version":"0.0.11-preview.1","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor","python","django","flask","fastapi"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.11-preview.1","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"3a790b50a586c780d0c668c87f899b7f8780e330","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.11-preview.1.tgz","fileCount":160,"integrity":"sha512-eWXTFXv6xTqHXyLdpuEyQ8TJdwkuF6yJtWTBg4Tv2wDlneiPG19xMVIiHN/+FoDUPbdMdO/jduoqcn4VwlgrJQ==","signatures":[{"sig":"MEUCIExTPNlC/nIWW/LE8CZRxeRPE/jyDJr9s2ToCWtB05tcAiEA6XKt+L8Ux5q9v9TXA/ksRz2NuAbqu/1HkZXnMSK1u/U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":366851},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"1df910ca19ccff42541840ee69f9e98bb75d8493","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.11-preview.1_1776717340803_0.5784243076280986","host":"s3://npm-registry-packages-npm-production"}},"0.0.12-preview.0":{"name":"vibe-hardening","version":"0.0.12-preview.0","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor","python","django","flask","fastapi"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.12-preview.0","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"fd2913f1686624d8d98abf2b8585e64cf81b08a9","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.12-preview.0.tgz","fileCount":164,"integrity":"sha512-atvZ9FCSltMbo+CMHRXt5REq5o5Xd2msemUB4+jm9m7zpbQ0ta6M2qmmz8fSaHocRRiJkyYvAPjKEuylCHmn+w==","signatures":[{"sig":"MEYCIQCWJfx2WexIl73x0xBWw1xIiVSOnR/W5h0QxR0zB3+T1gIhANPunOFNpIMHllZMdgSSnLX0EP136iYfLNABC8ln3EXK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":376552},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"cfef731b0d2c9b92b62e74c24f5f1f23f963585c","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.12-preview.0_1776771607083_0.39193730726929","host":"s3://npm-registry-packages-npm-production"}},"0.0.12-preview.1":{"name":"vibe-hardening","version":"0.0.12-preview.1","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor","python","django","flask","fastapi"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.12-preview.1","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"97166ea5203edf7a7e5a08c6cbfe29fe6b911c54","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.12-preview.1.tgz","fileCount":164,"integrity":"sha512-C7Y7JEwIXaHamXFGP1dHCCpgz07/FCFXV13mwPV0O5pytQ8jUd2yKd6j6o2iXZwPjKm9JqWaPA73H4TbEk56gA==","signatures":[{"sig":"MEUCIQDzmwDrzunkTwF7mqWUmmN4gCnJu6uLa2WZuLlkjk/1RwIgSbHenqfJ5onBKBm/u8d5LLi4aK5WqjmDfLgUZoeg8jM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":377791},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"3172d61da7c575d90da2683017af0c5e5f355769","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.12-preview.1_1776772000963_0.8818773511023608","host":"s3://npm-registry-packages-npm-production"}},"0.0.12-preview.2":{"name":"vibe-hardening","version":"0.0.12-preview.2","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor","python","django","flask","fastapi"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.12-preview.2","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"689d54f0f152bcc9b07d2550f05b8005f823dde9","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.12-preview.2.tgz","fileCount":164,"integrity":"sha512-VlyoTh/AQBm8Cs90U+ySkx8Yq7PUFwtOhOdYBYScJAcIg4go+W/XRWN69QqQyUep+TMjP7wqLwSewDjTc7PCOg==","signatures":[{"sig":"MEUCIC5EzML41T1V8Inia0t8TvyCnN9Jlj8sMMOMzGEZv5XZAiEA7dTyXFtNj30cWakR4qfe/U86EoRslz34tsYimU+0sdk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":378546},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"7aa327017af4afae77de54345d3ed6a05f4f44df","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.12-preview.2_1776773862295_0.09326421430221687","host":"s3://npm-registry-packages-npm-production"}},"0.0.13-preview.0":{"name":"vibe-hardening","version":"0.0.13-preview.0","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor","python","django","flask","fastapi"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.13-preview.0","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"061fca04fe920be52c04fd7fa7b505edc1e33220","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.13-preview.0.tgz","fileCount":168,"integrity":"sha512-uKgfw59foO5GjI2SC/C8ewaCmYx6/KNjRfPbSqKRerD0MWyyaelNxoRtZVQgujiCDOsmBlvhu0CCf89jyR2mAQ==","signatures":[{"sig":"MEYCIQDxZiA278Y9Ita1z3pxXHPwL1SV4caoPSLjnsX4UrHg+AIhAPfxYZPGZe6XuZVROyM6Rv5zcvDDJR0E05z9tUKxF1Lv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":387482},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"f3964f735f52b9818fb9a693b4bb4fb835525b9e","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.13-preview.0_1777319599691_0.7015836553750046","host":"s3://npm-registry-packages-npm-production"}},"0.0.14-preview.0":{"name":"vibe-hardening","version":"0.0.14-preview.0","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor","python","django","flask","fastapi"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.14-preview.0","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"5df205135bcd729b5017a069ec243e38cabb81c1","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.14-preview.0.tgz","fileCount":176,"integrity":"sha512-pmTYMEfS5Adsni9E0cCIX3eDVNz/p/13n9cF1Lb1CwIsrPhFX8lpQ0tVeXPre2cfV09ntVxL4nlb/chotuB4qQ==","signatures":[{"sig":"MEYCIQC+Gk4l/mSX8GW42xQrqOUrvnRtCwDiZzsaSt9NlLSURAIhAKouSYbrL61p1p/aNSsHN2pT7L/CEAL1h7lYWsgofkIB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":411425},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"2c43f2b240a6c6a2bbd85ee2a93d90bf0b5eb56b","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.14-preview.0_1777320501759_0.2717748777061417","host":"s3://npm-registry-packages-npm-production"}},"0.0.15-preview.0":{"name":"vibe-hardening","version":"0.0.15-preview.0","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor","python","django","flask","fastapi"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.15-preview.0","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"ed56484ee9ec629825a4f57ee63725e4be8dec6a","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.15-preview.0.tgz","fileCount":180,"integrity":"sha512-zZDPlGjbvq5LjoN7agthGx9igMoC84aour/aqsLrSIACuBHZ3HCoomAohif1HhLlg61ChI5bDxdVbgmS1uMI5w==","signatures":[{"sig":"MEUCIQDVEn/PGV0XIwLk2cDsVOnJJeHrYhyf/7Q24gLkDPi8RQIgHDtIr0TwDuGTgFU8EnN2taqGqkk2I02XMgraWq9sXLI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":430099},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"2c43f2b240a6c6a2bbd85ee2a93d90bf0b5eb56b","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.15-preview.0_1777324844541_0.890042890750764","host":"s3://npm-registry-packages-npm-production"}},"0.0.16-preview.0":{"name":"vibe-hardening","version":"0.0.16-preview.0","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor","python","django","flask","fastapi"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.16-preview.0","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"9b65a25b298236619fa0e6b8be79311c7c341ecd","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.16-preview.0.tgz","fileCount":184,"integrity":"sha512-UdTxfiygWmm2e0vS6KiiPUQofC/gYLlnX19QFpRXewGoNs66ET/dv1/+r02THSGgCXSQpCwNAq102Fa4ERcvOg==","signatures":[{"sig":"MEYCIQDBSqwkl/PtxQXhzjzMdUhSdmHZ3LwOL72bIIAnwkEEmQIhALl+Vhcy/tqAaYqNBTnPYQYyDsDO+hv79FQaLQMtazJ4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":449457},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"2224936efe1975e6c7fd23f08cb40c87d95ace65","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.16-preview.0_1777683804525_0.09787219281411508","host":"s3://npm-registry-packages-npm-production"}},"0.0.17-preview.0":{"name":"vibe-hardening","version":"0.0.17-preview.0","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor","python","django","flask","fastapi"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.17-preview.0","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"ae9e5a9a00a10f7ffa35f0dacc372ba300696152","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.17-preview.0.tgz","fileCount":184,"integrity":"sha512-eZgq8wotLbCJ8Esgpv4JhsYroO9oZlPhMyW9dDhYfRggxWgoLDMffsAw0YzZ+528OuuzLQBbfbdmm1/eCpDHjA==","signatures":[{"sig":"MEYCIQC9GyCeQScBw+FkI3+zUI+qLIlaJNfyB+SyV1ZL03vRmwIhAI76YvMHfIplkQS2+vxWayoqXU0U13RjLBJnJRDsYO/j","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":451208},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"4df4275324e85404725e5f8251d35622e81824a4","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.17-preview.0_1777684117414_0.02205644318632194","host":"s3://npm-registry-packages-npm-production"}},"0.0.18-preview.0":{"name":"vibe-hardening","version":"0.0.18-preview.0","keywords":["security","scanner","ai","vibe-coding","vulnerability","cli","secrets","supabase","rls","nextjs","v0","lovable","bolt","cursor","python","django","flask","fastapi"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.18-preview.0","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"65b81c16d9369f2686b876533fa807df6ddd695d","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.18-preview.0.tgz","fileCount":184,"integrity":"sha512-c7IGVNLIQ95paeRMtWp6Xixfm2RY4rGy9iigPCrmSIXTgg3r2kiAER5M8pAxY47iQZ4oHAkDvI2PYroVoEXF0w==","signatures":[{"sig":"MEQCIHx/UgTvO8zrNHr1fSujjmRE1HkoNJayyQq/k9N7wG4DAiAihOdPoVf/4VlKbVASevsLhaWE1TLJ7xQzcPgq/zjnmg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":453590},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"fae9586f1edf9e8208738186e62573ec71f15e97","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.18-preview.0_1777685368626_0.20638212392180733","host":"s3://npm-registry-packages-npm-production"}},"0.0.19-preview.0":{"name":"vibe-hardening","version":"0.0.19-preview.0","keywords":["security","scanner","ai","vibe-coding","ai-coding","ai-generated-code","vulnerability","cli","secrets","secret-detection","static-analysis","linter","pre-commit","github-action","supabase","rls","nextjs","v0","lovable","bolt","cursor","claude-code","replit","windsurf","trae","devin","python","django","flask","fastapi","osv","cve"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.19-preview.0","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"11ef1c3b9a665fea5d5ef3350143cc73b16f4b21","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.19-preview.0.tgz","fileCount":192,"integrity":"sha512-V5o91+NodmeAK6tilvWLKHLuFciuJhs1ggrSuaT0Tb2/lCbhmwAjOr0zaLEfeqcQMY9OOJl86TQHwVB+v7hKtg==","signatures":[{"sig":"MEUCIQDVuS3aUNPBmK9njzptKevFV6sXNIb+VghIVAWCHa+27gIgbeGEhrCpTj3Kqy2piLjUHTsFntHFGzNjjS3VTzooCpY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":477541},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"bdac876d0af30b7c7bdadd1a0b68f1ecb161cab2","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.19-preview.0_1777688374090_0.9656526082125383","host":"s3://npm-registry-packages-npm-production"}},"0.0.20-preview.0":{"name":"vibe-hardening","version":"0.0.20-preview.0","keywords":["security","scanner","ai","vibe-coding","ai-coding","ai-generated-code","vulnerability","cli","secrets","secret-detection","static-analysis","linter","pre-commit","github-action","supabase","rls","nextjs","v0","lovable","bolt","cursor","claude-code","replit","windsurf","trae","devin","python","django","flask","fastapi","osv","cve"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.0.20-preview.0","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"2590fdb7be629cc315f244e0526e7a45e6633359","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.0.20-preview.0.tgz","fileCount":192,"integrity":"sha512-bqUhaiRZowIwe0dQRvYa8bZY8jqCOwRCpObw1myxyxKkVxa9u4R11G0tG2JfncE/bMPyINBoiaZRZT2JQ6In8w==","signatures":[{"sig":"MEUCIEBXGv7+IpsrwBQ4OXht0e0i/umussQtAHR0F3MrpnwVAiEA3WGQgAFSXZ+RZs/o2ciTmv1JPhIP0AN7NyQrnM5ZyPk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":484061},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"8bf026195f03086a1db85cc570e158d969b597d7","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.zh-Hant.md","devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.0.20-preview.0_1777688672512_0.7751782654198396","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"vibe-hardening","version":"0.1.0","keywords":["security","scanner","ai","vibe-coding","ai-coding","ai-generated-code","vulnerability","cli","secrets","secret-detection","static-analysis","linter","pre-commit","github-action","supabase","rls","nextjs","v0","lovable","bolt","cursor","claude-code","replit","windsurf","trae","devin","python","django","flask","fastapi","osv","cve"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.1.0","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"f2df778c8fd2e20b3cb928c8f65df1c587e48e06","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.1.0.tgz","fileCount":192,"integrity":"sha512-2R4xTw7dUDILDUmzMehBxvPt8IiZ55cSp/XYc+7U58T8yk/oUiS9xznRTTvJRoG/CbMInyHApLEcCyTM7SpVGg==","signatures":[{"sig":"MEUCIHjxv85N/1r8LIKYHrvbPdHrKqPA5dWcRAw3DKEfjnHtAiEAyO4PsPYjyK33irykNjmsozI8/M68p2EEs9NiVro3MWk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":484050},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"538a824cb3ea3366954bde1adb171e100d822447","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.1.0_1777725188834_0.34919200532061123","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"vibe-hardening","version":"0.1.1","keywords":["security","scanner","ai","vibe-coding","ai-coding","ai-generated-code","vulnerability","cli","secrets","secret-detection","static-analysis","linter","pre-commit","github-action","supabase","rls","nextjs","v0","lovable","bolt","cursor","claude-code","replit","windsurf","trae","devin","python","django","flask","fastapi","osv","cve"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.1.1","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"af109bbf9d4f0e748f2227e8489d5ead8febb29d","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.1.1.tgz","fileCount":192,"integrity":"sha512-d9DhLhf4iA6DhYkXWWrVf9V7gJWqyzYj/du5sBhWpZFNfXG2HzOAaSxKv67PgzZyctxp4yye1LgE1YCfjlX70g==","signatures":[{"sig":"MEUCIQDyWGk+00UDKaxKFp+oXLlCmdj7EQM4urPtbIjrj/dctQIgTgVMYgRYbyrgdDVcgwpLn0TSuNxmxdUT/YrNeHueyUg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":485854},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"d076f7f1c723aa0a02fc96e675a304c1510ef7a2","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.1.1_1777725616585_0.9303545928055288","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"vibe-hardening","version":"0.1.2","keywords":["security","scanner","ai","vibe-coding","ai-coding","ai-generated-code","vulnerability","cli","secrets","secret-detection","static-analysis","linter","pre-commit","github-action","supabase","rls","nextjs","v0","lovable","bolt","cursor","claude-code","replit","windsurf","trae","devin","python","django","flask","fastapi","osv","cve"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.1.2","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"642b50dee3a6c4441041f45813317a41189ddaa7","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.1.2.tgz","fileCount":192,"integrity":"sha512-SHxt5lPVXemWxPf6Z2+ukfU0kAoqdFWpIlrjYpehMailNrGsD6VWnmYuC33DQwS8sYBwCdjSN2ZJ2XN3sNN27w==","signatures":[{"sig":"MEUCIBj7gaZ7LnZcGy9mgDxWKElf/zrijjOhsOgx23C0WNLmAiEAnrVG5SPzE3TYF8WKhm+1yb3zAVWn/kh+rq2wqseYLcM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":488170},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"979fd94279a02e84cd0dbe8364cd7c3dd006c9f4","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.1.2_1777726693448_0.3199051697069739","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"vibe-hardening","version":"0.2.0","keywords":["security","scanner","ai","vibe-coding","ai-coding","ai-generated-code","vulnerability","cli","secrets","secret-detection","static-analysis","linter","pre-commit","github-action","supabase","rls","nextjs","v0","lovable","bolt","cursor","claude-code","replit","windsurf","trae","devin","python","django","flask","fastapi","osv","cve"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.2.0","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"4753361313320609721c1a71b25a4167c1331301","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.2.0.tgz","fileCount":208,"integrity":"sha512-lRaSXwVYhIGC4DKHWpv2SpchKiXY8GbBRB7HThiFf8TF858J9e6Rd6WbADTKlcCaobyGTVoa8Emms3pUHw3qtA==","signatures":[{"sig":"MEQCIAarVOAcCoT5x+9vHg+JhZOTXz1pVDA0rVCfVRtqiPLXAiAJh6E+GuhOyxjbugrALWgK2nn7XLyItxIQ/qRxGZZF4Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":522274},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"56aa7a08cf56f50168d4079c70f7208123321bf4","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.2.0_1777795389670_0.3738787380222788","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"vibe-hardening","version":"0.2.1","keywords":["security","scanner","ai","vibe-coding","ai-coding","ai-generated-code","vulnerability","cli","secrets","secret-detection","static-analysis","linter","pre-commit","github-action","supabase","rls","nextjs","v0","lovable","bolt","cursor","claude-code","replit","windsurf","trae","devin","python","django","flask","fastapi","osv","cve"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.2.1","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"744da7eba05234216fb29ee03c7c4ba2c21b90f6","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.2.1.tgz","fileCount":208,"integrity":"sha512-2y82SDk1cUj6oGlzIpgwjvMeTdUBf1UKXlgg3cnaqhH81mvWSCk8mggu0ocH+t0cjYZh4y9W2cRLfgOojOiyJg==","signatures":[{"sig":"MEYCIQDdjShr5hRw+MhpDt5jpKd+dR0fCBkqN4Ro5aq3YPB5EgIhAJ+bHIDqxl3nZPZauskBIcXOIQSGPp2sRLVBrT7x2hvy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":524198},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"56aa7a08cf56f50168d4079c70f7208123321bf4","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.2.1_1777795598556_0.7813453626221383","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"vibe-hardening","version":"0.3.0","keywords":["security","scanner","ai","vibe-coding","ai-coding","ai-generated-code","vulnerability","cli","secrets","secret-detection","static-analysis","linter","pre-commit","github-action","supabase","rls","nextjs","v0","lovable","bolt","cursor","claude-code","replit","windsurf","trae","devin","python","django","flask","fastapi","osv","cve"],"author":{"name":"angletech2026"},"license":"MIT","_id":"vibe-hardening@0.3.0","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"homepage":"https://vibe-hardening.io","bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"bin":{"vh":"bin/vibe-hardening.js","vibe-hardening":"bin/vibe-hardening.js"},"dist":{"shasum":"6f78bbe9f143cd1ba2a150a6dd7f59613de0aaa0","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.3.0.tgz","fileCount":216,"integrity":"sha512-JMJLmZEozATphdqsntXA4I9zyRhoyuGVx5Ta8LrzPX2ecOpoFyMi6WLrQuJyo1IicklRWZuUY+KQ/NgxEa/euQ==","signatures":[{"sig":"MEUCIG5kuYWkSojgg/1lvK9dIKn5KGC3ZxXQkrAVkBq4XYz7AiEA6WxzgCh0WNOafyH3LfrCrWt4BW7t1JU6SAOStp1ELro=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":568848},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.17.0"},"gitHead":"6220c6d783802e41975244109bb007d637446acd","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"repository":{"url":"git+https://github.com/vibe-hardening/cli.git","type":"git"},"_npmVersion":"11.6.2","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ts-morph":"^24.0.0","commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","zod":"^3.24.1","yaml":"^2.6.1","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/vibe-hardening_0.3.0_1777808610647_0.0477881720262614","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"vibe-hardening","version":"0.4.0","description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","type":"module","bin":{"vibe-hardening":"bin/vibe-hardening.js","vh":"bin/vibe-hardening.js"},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","dev":"tsx src/cli.ts","test":"vitest run","test:watch":"vitest","typecheck":"tsc --noEmit"},"keywords":["security","scanner","ai","vibe-coding","ai-coding","ai-generated-code","vulnerability","cli","secrets","secret-detection","static-analysis","linter","pre-commit","github-action","supabase","rls","nextjs","v0","lovable","bolt","cursor","claude-code","replit","windsurf","trae","devin","python","django","flask","fastapi","osv","cve"],"author":{"name":"angletech2026"},"license":"MIT","homepage":"https://vibe-hardening.io","repository":{"type":"git","url":"git+https://github.com/vibe-hardening/cli.git"},"bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"engines":{"node":">=18.17.0"},"dependencies":{"commander":"^12.1.0","fast-glob":"^3.3.3","picocolors":"^1.1.1","ts-morph":"^24.0.0","yaml":"^2.6.1"},"devDependencies":{"@types/node":"^22.10.5","tsx":"^4.19.2","typescript":"^5.7.2","vitest":"^2.1.8","zod":"^3.24.1"},"gitHead":"3fa51827b42ab9beb9dd2c249a7cd76e932a3d4f","_id":"vibe-hardening@0.4.0","_nodeVersion":"24.13.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-I9+2f1kXoTSC6LXcfmVN5/6/OeV9PwWIU2gZqWax787yNx5jsD8F2HZA570hqdDm19M11qGYad1P2S1+dfvIaA==","shasum":"d60b72fa4115af7dbf9527d100fa02f46a6dec99","tarball":"https://registry.npmjs.org/vibe-hardening/-/vibe-hardening-0.4.0.tgz","fileCount":268,"unpackedSize":707302,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIC9Wvz2m4N0HJcnoXpOd167JkFwuv/X7yRGZKU2OQF/LAiEA98w/41PM7Af0wTUxxQKirzwwiNh64up+8dW9eznFGpc="}]},"_npmUser":{"name":"angletech2026","email":"angletech2026@gmail.com"},"directories":{},"maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/vibe-hardening_0.4.0_1777988887481_0.41104962687257873"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-17T19:51:26.686Z","modified":"2026-05-05T13:48:07.835Z","0.0.1-preview.0":"2026-04-17T19:51:26.988Z","0.0.2-preview.0":"2026-04-19T09:54:35.364Z","0.0.3-preview.0":"2026-04-19T10:16:51.181Z","0.0.3-preview.1":"2026-04-19T10:23:16.697Z","0.0.3-preview.2":"2026-04-19T11:35:17.556Z","0.0.4-preview.0":"2026-04-19T12:11:05.065Z","0.0.4-preview.1":"2026-04-19T13:26:02.536Z","0.0.5-preview.0":"2026-04-19T15:35:06.300Z","0.0.5-preview.1":"2026-04-19T15:40:54.982Z","0.0.5-preview.2":"2026-04-19T15:57:57.856Z","0.0.5-preview.3":"2026-04-19T16:08:15.283Z","0.0.6-preview.0":"2026-04-19T17:49:27.770Z","0.0.7-preview.0":"2026-04-20T09:52:52.308Z","0.0.7-preview.1":"2026-04-20T15:04:53.117Z","0.0.7-preview.2":"2026-04-20T15:14:52.712Z","0.0.7-preview.3":"2026-04-20T16:02:31.421Z","0.0.8-preview.0":"2026-04-20T16:36:09.728Z","0.0.8-preview.1":"2026-04-20T16:42:12.520Z","0.0.8-preview.2":"2026-04-20T17:07:00.239Z","0.0.8-preview.3":"2026-04-20T18:16:34.824Z","0.0.9-preview.0":"2026-04-20T19:23:44.473Z","0.0.9-preview.1":"2026-04-20T19:32:20.140Z","0.0.9-preview.2":"2026-04-20T19:46:43.950Z","0.0.10-preview.0":"2026-04-20T19:48:53.770Z","0.0.10-preview.1":"2026-04-20T20:04:37.547Z","0.0.10-preview.2":"2026-04-20T20:10:42.502Z","0.0.11-preview.0":"2026-04-20T20:17:02.876Z","0.0.11-preview.1":"2026-04-20T20:35:41.024Z","0.0.12-preview.0":"2026-04-21T11:40:07.248Z","0.0.12-preview.1":"2026-04-21T11:46:41.147Z","0.0.12-preview.2":"2026-04-21T12:17:42.448Z","0.0.13-preview.0":"2026-04-27T19:53:19.841Z","0.0.14-preview.0":"2026-04-27T20:08:21.906Z","0.0.15-preview.0":"2026-04-27T21:20:44.699Z","0.0.16-preview.0":"2026-05-02T01:03:24.688Z","0.0.17-preview.0":"2026-05-02T01:08:37.563Z","0.0.18-preview.0":"2026-05-02T01:29:28.785Z","0.0.19-preview.0":"2026-05-02T02:19:34.251Z","0.0.20-preview.0":"2026-05-02T02:24:32.693Z","0.1.0":"2026-05-02T12:33:08.975Z","0.1.1":"2026-05-02T12:40:16.729Z","0.1.2":"2026-05-02T12:58:13.671Z","0.2.0":"2026-05-03T08:03:09.899Z","0.2.1":"2026-05-03T08:06:38.709Z","0.3.0":"2026-05-03T11:43:30.853Z","0.4.0":"2026-05-05T13:48:07.707Z"},"bugs":{"url":"https://github.com/vibe-hardening/cli/issues"},"author":{"name":"angletech2026"},"license":"MIT","homepage":"https://vibe-hardening.io","keywords":["security","scanner","ai","vibe-coding","ai-coding","ai-generated-code","vulnerability","cli","secrets","secret-detection","static-analysis","linter","pre-commit","github-action","supabase","rls","nextjs","v0","lovable","bolt","cursor","claude-code","replit","windsurf","trae","devin","python","django","flask","fastapi","osv","cve"],"repository":{"type":"git","url":"git+https://github.com/vibe-hardening/cli.git"},"description":"One-command security scanner for AI-generated code. Vibe coded. Vibe hardened.","maintainers":[{"name":"angletech2026","email":"angletech2026@gmail.com"}],"readme":"# vibe-hardening\n\n> **Vibe coded. Vibe hardened.**\n>\n> 給 AI 生成程式碼用的一鍵資安掃描 CLI。\n\n**語言**：[English](./README.md) · **繁體中文** · [简体中文](./README.zh-Hans.md) · [한국어](./README.ko.md) · [日本語](./README.ja.md)\n\n[![npm](https://img.shields.io/npm/v/vibe-hardening?label=npm&color=blue)](https://www.npmjs.com/package/vibe-hardening)\n[![GitHub Marketplace](https://img.shields.io/badge/Marketplace-vibe--hardening-blue?logo=github)](https://github.com/marketplace/actions/vibe-hardening)\n[![License](https://img.shields.io/badge/license-MIT-green)](./LICENSE)\n\n```bash\nnpx vibe-hardening scan\n```\n\n網站：[vibe-hardening.io](https://vibe-hardening.io)\n\n## 快速上手（5 秒）\n\n```bash\n# 1. 打開 terminal\n# 2. cd 到任何一個你用 AI 寫過的 JS / TS 專案\ncd ~/projects/my-app\n\n# 3. 跑掃描\nnpx vibe-hardening scan\n```\n\n第一次 npx 會問 `Ok to proceed?`，按 `Enter` 即可。\n\n**需求**：Node.js 18.17+（你有用過 `npm` / `next` / `vite` 就代表已裝）。\n\n**常見卡點**：\n- 在 `Desktop/` 直接跑 → 會掃整個桌面一團亂。先 `cd` 進去具體專案。\n- 跑在 `vibe-hardening` repo 自己裡面 → 你會掃到工具本體，不是你的 app。\n- 沒裝 Node：到 [nodejs.org](https://nodejs.org) 下載。出現 `'npx' 無法辨識` 就是這個原因。\n\n## 能抓到什麼\n\n**支援語言**：JavaScript / TypeScript / **Python**（Django / Flask / FastAPI）/ **Go** / **Rust**。\n\n74 條規則、4 種語言、9 大類別。針對 **v0 / Lovable / Bolt / Cursor / Claude Code / Replit Agent / Windsurf / Devin** 這些工具生出來的 repo 調校。\n\n| 類別 | 例子 |\n|------|------|\n| **Secret 洩漏** | OpenAI `sk-proj-`、Anthropic `sk-ant-`、Stripe `sk_live_`、GitHub PAT、AWS 金鑰、Supabase `service_role` JWT、DB 連線字串、Slack token、SendGrid `SG.`、Notion `secret_`/`ntn_`、Twilio Account SID + Auth Token、**Google / Gemini `AIzaSy...`**、JWT 簽章金鑰 |\n| **注入攻擊** | SQL template literal、NoSQL `req.body`、`child_process.exec` 字串拼接、path traversal、`dangerouslySetInnerHTML` 未清洗 |\n| **網路層** | CORS `*` + credentials、CORS 反射 origin、SSRF `fetch(req.body.url)`、open redirect |\n| **Auth** | Next.js API route 沒 auth（AST 分析）、JWT `alg: none`、`\\|\\| true` bypass、`// TODO: add auth`、弱 cookie |\n| **資料庫** | Supabase table 沒開 RLS、policy 用 `(true)`、`'use client'` 檔案出現 service_role |\n| **環境變數誤用** | `NEXT_PUBLIC_*SECRET` / `*SERVICE_ROLE` 會被打包進 client bundle |\n| **供應鏈（需網路）** | OSV.dev 依賴 CVE 查詢、LLM 幻覺套件偵測（對比 npm registry） |\n| **平台指紋** | 偵測你用哪家 AI 生的 code、調整規則權重 |\n| **Python（Django/Flask/FastAPI）** | `DEBUG = True`、寫死的 `SECRET_KEY`、`ALLOWED_HOSTS = ['*']`、`@csrf_exempt`、`yaml.load`、`pickle.loads(user_input)`、SQL f-string 注入、`subprocess(shell=True)`、`eval(request.*)`、FastAPI 沒 `Depends(get_current_user)`、`jwt.decode(algorithms=['none'])` |\n\n## 用法\n\n```bash\n# 掃當前目錄\nnpx vibe-hardening scan\n\n# 掃指定資料夾\nnpx vibe-hardening scan ./my-project\n\n# CI 用（有 critical/high 就 exit 1）\nnpx vibe-hardening scan --format json --output report.json\n\n# 只看 high 以上\nnpx vibe-hardening scan --severity high\n\n# 跳過網路檢查（OSV、npm registry）\nnpx vibe-hardening scan --offline\n\n# 即時驗證找到的金鑰在 provider 上是否還活著（需 --own）\nnpx vibe-hardening scan --verify --own\n\n# 只掃 git diff 變動的檔案（CI / pre-commit 用，大 repo 快 10 倍）\n# 不加 ref 跟 HEAD 比；加 ref 走 3-dot diff（PR 模式）\nnpx vibe-hardening scan --changed-only\nnpx vibe-hardening scan --changed-only=main\n\n# 獨立 HTML 報告 — 可分享、存檔後離線也能看\nnpx vibe-hardening scan --format html -o report.html\n\n# Markdown 報告 — 直接貼 PR comment / Slack / Issue\nnpx vibe-hardening scan --format markdown -o report.md\n\n# 跟 baseline 比 — PR 模式，只顯示這個 PR 新增的 finding\nnpx vibe-hardening scan --format json -o baseline.json   # 先在 main 跑\nnpx vibe-hardening scan --compare baseline.json          # 切到 PR 跑\n\n# 產生顯示目前分數跟等級的 SVG badge，可貼進 README\nnpx vibe-hardening badge -o .github/vibe-hardening.svg\n\n# --roast 模式：用毒舌 brutalist 一句話取代中性訊息。\n# 只影響 console — JSON / HTML 輸出維持專業給 CI 用。\nnpx vibe-hardening scan --roast\n\n# --suggest-fix：對可修的 secret findings，印出可直接複製貼上的 diff\n# (字面量 → process.env.X)。絕對不會改你的檔案。\nnpx vibe-hardening scan --suggest-fix\n\n# 查任何 rule ID 的詳細說明 — 嚴重度、抓什麼、為什麼重要、怎麼修\nnpx vibe-hardening explain vh-secret-openai\n```\n\n### `--verify` 即時金鑰驗證\n\n對有 verifier 的金鑰（OpenAI、Anthropic、Stripe、GitHub PAT、Slack、SendGrid、Notion、Gemini），`--verify --own` 會對每個找到的金鑰打一次 provider 最輕量的讀取 API（list models、auth test 等，**絕不**破壞性），分類成：\n\n- **LIVE KEY** — 立刻輪換\n- **revoked** — 安全，有空再清\n- **unverified** — 被限流、離線，或該 kind 沒 verifier\n\n`--own` 是故意加的安全帶，CLI 拒絕去探測你沒聲明擁有的金鑰。沒加 `--own` 時，`--verify` 會丟 stderr 警告並退回只偵測模式。\n\n### `--suggest-fix` 複製貼上 diff\n\n對修法明確的 secret findings（「字面量 → 環境變數」），`--suggest-fix` 印出可直接複製的 unified-diff 風格區塊：\n\n```\n▲ SUGGESTED FIXES  (2)\n\napp.ts\n  (1)  vh-secret-openai\n    - const k = \"sk-proj-Tc8aNm3LKuWqVJ0HbDpZ4yourkeyhere5oI7yBkQv9MaCwSdRtPlNgUeFxOiHjZkLmNbCdEf\";\n    + const k = process.env.OPENAI_API_KEY;\n\nAdd to .env.example:\n    + OPENAI_API_KEY=\n```\n\n支援 12 家 provider（OpenAI、Anthropic、Stripe、GitHub、Slack、SendGrid、Notion、Twilio、Google、AWS、JWT、通用 DB URL）。換 env-var 解不掉的 finding（SQL injection、缺驗證等）會跳過 — 模板建議套上去只會把 code 搞壞。\n\n**絕對不會改你的檔案。** 輸出是給你看完手動套用的文字。只影響 console — JSON / HTML 輸出不受影響。配 `--changed-only` 用就是最快的 pre-commit 檢查。\n\n### `--roast` 模式\n\n把中性 rule 訊息換成毒舌 brutalist 一句話，分數列也加一段吐槽：\n\n```\n CRITICAL  vh-secret-openai  (2:12)\n           OpenAI key in source. Your token bill just rang. It's scared.\n           snippet: sk-pro…opqr\n\nscore      42 / 100  [F]   This is a hostage note to yourself.\n```\n\n每一條 shipped rule 都有手寫台詞（48 條，涵蓋 secrets / injection / auth / network / Python / 供應鏈）。依賴 CVE 用 prefix roast。未知 rule 會 fallback 到原本的中性訊息。\n\n**只影響 console** — JSON 跟 HTML reporter 完全不碰，CI artifact / 合規報告 / 任何機器解析用的都保持專業。跟其他 flag 可以自由組合：\n\n```bash\nnpx vibe-hardening scan --roast\nnpx vibe-hardening scan --verify --own --roast\n```\n\n### HTML 報告\n\n```bash\nnpx vibe-hardening scan --format html -o report.html\n# macOS:   open report.html\n# Linux:   xdg-open report.html\n# Windows: start report.html\n```\n\n單檔自包含（只有 Google Fonts 是外部資源），可以放心 email、丟 Slack、或當 CI artifact 上傳。就算 100 個以上 findings 通常也 < 50 KB。\n\n**包含**：hero 區塊（等級、分數）、嚴重度統計、依檔案分組的 findings（rule ID / 行號 / snippet / 修法）、`--verify` 結果徽章（▲ LIVE KEY / ✓ REVOKED / ? UNVERIFIED）、可重用的 inline SVG 分數 badge。\n\n**不包含**：原始金鑰值（reporter 產出前就 strip 掉）、絕對路徑（只留相對路徑）、環境變數。reporter 永遠不碰 `process.env`，分享 HTML 很安全。\n\n### CI 整合（GitHub Actions）\n\n直接用發布的 action — `uses: vibe-hardening/cli@v1`：\n\n```yaml\nname: vibe-hardening\non: [pull_request, push]\njobs:\n  scan:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n        with:\n          fetch-depth: 0  # --changed-only PR 模式必要\n      - uses: vibe-hardening/cli@v1\n        with:\n          severity: high\n          format: html\n          output: vh-report.html\n          changed-only: origin/${{ github.base_ref }}  # PR 模式快 10×\n      - uses: actions/upload-artifact@v4\n        if: always()\n        with:\n          name: vibe-hardening-report\n          path: vh-report.html\n```\n\n可用 inputs：`cwd` · `severity` · `format` · `output` · `changed-only` · `verify` · `roast` · `version`。有任何 critical 或 high 時 exit 1，CI 立刻失敗。\n\nOutput：`exit-code`（搭配 `continue-on-error: true` 可以 gate 部署但不讓 action 失敗）。\n\n大部分團隊**不在 CI 跑** `verify: true` — 對 provider 打 live API 在 CI 容易撞 rate limit，本地跑就好。\n\n### README badge\n\n```bash\nnpx vibe-hardening badge -o .github/vibe-hardening.svg\n```\n\n然後在 README 裡引用：\n\n```markdown\n![vibe-hardening](./.github/vibe-hardening.svg)\n```\n\nmain branch merge 後重跑一次保持最新。SVG 約 500 bytes，無 runtime，GitHub 直接原生 render。\n\n## Agent Scan（0.4.0 新增）\n\n`vibe-hardening` 現在可以掃**你電腦上的 AI agent skill 檔案**——不只 code。Skill 是 markdown + scripts、被 agent 平台在 runtime 載入到 context、是新的攻擊面：\n\n```bash\nnpx vibe-hardening agent scan\n```\n\n自動偵測 **Cursor / Claude Code / OpenClaw / Hermes / Gemini CLI / Goose / OpenCode / Codex / Trae / Factory** 的 skill 安裝（以及其他用 `~/.<agent>/skills/` pattern 的工具）。\n\n**掃 65 條規則、5 個 pack：**\n- **A 硬編密鑰**（reuse v1 27 條 secret 規則、加掃 `.env`）\n- **B prompt injection**（11 條：ignore previous、role override、ChatML token、Llama tag、零寬字元）\n- **C 危險 shell**（14 條：`rm -rf /`、`curl | sh`、persistence 寫進 `.bashrc`、fork bomb）\n- **D skill schema**（5 條：缺欄位、隱藏 scripts/、敏感路徑+exfil、env-dump、typosquat skill 名）\n- **G MCP 設定**（6 條：非 TLS、localhost 殘留、env secret、server 名 typosquat、>20 servers、`npx -y` 未驗證）\n\n**為什麼現在做、不等到第一次 skill compromise 上 HN 才動工**——agent platform 的 supply chain 攻擊是必然會發生、只是時間問題。這把工具是預警系統。\n\n## Telemetry（opt-in）\n\nvibe-hardening 在你機器上跑。程式碼、密鑰、檔案路徑通通不會離開你的筆電。第一次互動式 scan 完，CLI 會問你**一次**要不要分享匿名統計，這樣我們才能知道哪些規則該強化：\n\n```\n▲ vibe-hardening · first run — help us harden the rules\n\n  We collect: rule IDs that fired, AI platform fingerprint,\n              CLI version, scan duration, file count, score, anon UUID.\n  We never  : your code, secrets, file names, paths, IP, email.\n\n  Opt in later:    vibe-hardening config set telemetry on\n  Privacy:         https://vibe-hardening.io/privacy\n\n  Share anonymous scan stats? [y/N]\n```\n\n預設是**否**——只有明確輸入 `y` / `yes` 才會 opt in。隨時可改：\n\n```bash\nvibe-hardening config show              # 看現在的設定跟存放位置\nvibe-hardening config set telemetry on  # opt in（持久）\nvibe-hardening config set telemetry off # opt out（持久）\n```\n\n**通用 opt-out 一律先過**（即使你 local 設 on 也一樣）：`DO_NOT_TRACK=1`、`CI=1`、`VH_TELEMETRY_DISABLED=1`、`VH_TELEMETRY=off`。\n\n完整收集欄位、保存期間、原始碼可驗：<https://vibe-hardening.io/zh/privacy>。\n\n## 平台指紋偵測\n\n掃描開始時會先認出 repo 是哪家 AI 產的：\n\n```\nvibe-hardening scan complete  ·  147 files  ·  412ms\nplatform  v0  (74% confidence)\n```\n\n支援：`v0` / `lovable` / `bolt` / `cursor` / `claude-code` / `replit-agent` / `windsurf` / `devin`。\n\n## 現況\n\n預覽版 —— Phase 1 MVP 目標 **2026-05-13** 上 Product Hunt。\n\n目前覆蓋（`v0.4.0`）：\n- 支援語言：JavaScript / TypeScript / Python（Django、Flask、FastAPI）/ **Go** / **Rust**\n- 6 個引擎：RLS diff、JWT payload、auth AST、pattern regex、OSV.dev、LLM 幻覺\n- **74 條 code 規則 + 65 條 agent-scan 規則 + 406 個測試**、一般 repo 5 秒內掃完\n- **Agent skill scanner**（0.4.0 新增）—— Cursor / Claude Code / OpenClaw / Hermes / Gemini CLI / Goose / OpenCode / Codex / Trae / Factory\n- **opt-in 匿名 telemetry**（預設 off，環境變數可永久關）\n- 8 家 provider 即時金鑰驗證（OpenAI、Anthropic、Stripe、GitHub PAT、Slack、SendGrid、Notion、Gemini）\n- 每個 LIVE KEY 旁邊顯示預估濫用成本（9 家 provider，含 Twilio）\n- 輸出格式：彩色終端機、CI 用 JSON、獨立 HTML 報告\n- 0-100 資安分數 + A-F 等級 + SVG README badge\n- 行內抑制：`// vibe-hardening-disable-next-line vh-rule-id`\n- 8 家 AI 平台指紋偵測\n\n路線圖：\n- Go / Rust 支援（Phase 3）\n- Markdown reporter\n- GitHub Action + PR 留言機器人\n- Pro dashboard、Slack 通知（上線後）\n\n## 回報漏洞\n\n請 email `angletech2026@gmail.com`，**不要開 public issue**。詳見 [SECURITY.md](./SECURITY.md)。\n\n## License\n\nMIT © 2026 vibe-hardening contributors.\n","readmeFilename":"README.zh-Hant.md"}