{"_id":"@asyncinnovator/hallint","_rev":"10-b71dc043f431c6c21f05d65c56cd8502","name":"@asyncinnovator/hallint","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@asyncinnovator/hallint","version":"0.1.0","keywords":["ai","static-analysis","security","linter","copilot","cursor","code-quality","hallint"],"license":"MIT","_id":"@asyncinnovator/hallint@0.1.0","maintainers":[{"name":"asyncinnovator","email":"sheth.rishu50@gmail.com"}],"homepage":"https://github.com/Asyncinnovator/hallint#readme","bugs":{"url":"https://github.com/Asyncinnovator/hallint/issues"},"dist":{"shasum":"58a9d49525f18e3e302a7c136a9eda56c6620d55","tarball":"https://registry.npmjs.org/@asyncinnovator/hallint/-/hallint-0.1.0.tgz","fileCount":5,"integrity":"sha512-0xdgWRTE+MNMoef/AN63vPr/6Yt8fm7dBNnuQm4tsD8WydO/vAAZbMI1aVbV5mcxzfyr6xoLN5FAHzo2z7OApw==","signatures":[{"sig":"MEUCIQDJDFX9AeBEEmDKcNldB6Yz7vGjtsAryFtNvlq0qjFgLwIgEHOXGb9SIw1vv4i3ephHZZGpkAWA8l+Hlk6/1Eulst0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22501},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"1695b1dde9928ede5bef9d71d35c16dee93d34f4","scripts":{"dev":"tsup src/index.ts --format esm,cjs --dts --watch","build":"tsup src/index.ts --format esm,cjs --dts --clean"},"_npmUser":{"name":"asyncinnovator","email":"sheth.rishu50@gmail.com"},"repository":{"url":"git+https://github.com/Asyncinnovator/hallint.git","type":"git"},"_npmVersion":"11.11.0","description":"Detect security and quality issues in AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"glob":"^10.3.0","chalk":"^5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hallint_0.1.0_1783409334249_0.8665037716319488","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@asyncinnovator/hallint","version":"0.1.1","keywords":["ai","static-analysis","security","linter","copilot","cursor","code-quality","hallint"],"license":"MIT","_id":"@asyncinnovator/hallint@0.1.1","maintainers":[{"name":"asyncinnovator","email":"sheth.rishu50@gmail.com"}],"homepage":"https://github.com/Asyncinnovator/hallint#readme","bugs":{"url":"https://github.com/Asyncinnovator/hallint/issues"},"dist":{"shasum":"f1ba7855bbed422a1761f33b13ffa0e4b878fc8e","tarball":"https://registry.npmjs.org/@asyncinnovator/hallint/-/hallint-0.1.1.tgz","fileCount":5,"integrity":"sha512-ikT7r1+uXRcr1MF2EWTT9Y2jifmj4PgmCZeUCFvTVpf+aZ4SFGXkwKZao5Ganqa4RWTFIMzV55rvKnpiVTB9yA==","signatures":[{"sig":"MEUCIQCzhGGa5uGSmcue9vFyr2F1lxzB7cmOpw7mujea+XP4rgIgXZuWOMC1tb4T86s1AGiXUI32hmn/aC2Czzx7CrCJlac=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22673},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"4bcf3c63a70c72d18541c98359e2795783ca801f","scripts":{"dev":"tsup src/index.ts --format esm,cjs --dts --watch","build":"tsup src/index.ts --format esm,cjs --dts --clean"},"_npmUser":{"name":"asyncinnovator","email":"sheth.rishu50@gmail.com"},"repository":{"url":"git+https://github.com/Asyncinnovator/hallint.git","type":"git"},"_npmVersion":"11.11.0","description":"Detect security and quality issues in AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"glob":"^10.3.0","chalk":"^5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hallint_0.1.1_1783511660523_0.3973589614774824","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@asyncinnovator/hallint","version":"0.1.2","keywords":["ai","static-analysis","security","linter","copilot","cursor","code-quality","hallint"],"license":"MIT","_id":"@asyncinnovator/hallint@0.1.2","maintainers":[{"name":"asyncinnovator","email":"sheth.rishu50@gmail.com"}],"homepage":"https://github.com/Asyncinnovator/hallint#readme","bugs":{"url":"https://github.com/Asyncinnovator/hallint/issues"},"dist":{"shasum":"a77178f39ce4eecc4eb15cd80f5ec0f719ecfd8b","tarball":"https://registry.npmjs.org/@asyncinnovator/hallint/-/hallint-0.1.2.tgz","fileCount":5,"integrity":"sha512-kYXRk4j7kl22/E4ab9aFLbuwcTRQ9yHJUmO+/K/b8hA7uCGGHZpRkDDn5b4qUvv8NggZYYae0n5UQk9Rtab2dA==","signatures":[{"sig":"MEQCIBRsIv19C0CgVoHjI3084CcDFX2gxl7TAlmXPsYwV6bgAiAMAzL1vXvlGlM5kwdYioe0ft7Aex7PD/nMvWoryoKApA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22595},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"6984b697343f37f8a090d0f6f798ddacb0b75f65","scripts":{"dev":"tsup src/index.ts --format esm,cjs --dts --watch","build":"tsup src/index.ts --format esm,cjs --dts --clean"},"_npmUser":{"name":"asyncinnovator","email":"sheth.rishu50@gmail.com"},"repository":{"url":"git+https://github.com/Asyncinnovator/hallint.git","type":"git"},"_npmVersion":"11.11.0","description":"Detect security and quality issues in AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"glob":"^10.3.0","chalk":"^5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hallint_0.1.2_1783512148580_0.8925998403413495","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@asyncinnovator/hallint","version":"0.1.3","keywords":["ai","static-analysis","security","linter","copilot","cursor","code-quality","hallint"],"license":"MIT","_id":"@asyncinnovator/hallint@0.1.3","maintainers":[{"name":"asyncinnovator","email":"sheth.rishu50@gmail.com"}],"homepage":"https://github.com/Asyncinnovator/hallint#readme","bugs":{"url":"https://github.com/Asyncinnovator/hallint/issues"},"dist":{"shasum":"b26484d9a6f9fb20865d34592e219b690332ce70","tarball":"https://registry.npmjs.org/@asyncinnovator/hallint/-/hallint-0.1.3.tgz","fileCount":5,"integrity":"sha512-jWoLgu94jBWHaiOojZVORQuLWF4thweiQyEOnpguQ+iJzW/R72v+s2iPPJWi/TDbKweGekKAlJLj9Kfp85QYnw==","signatures":[{"sig":"MEUCIASC1vw5OzJ3l86NJptI/UuMeeACGLb/e1WDHOYdzYa+AiEAn3SUWAZjvBviKPJtSltQfty2x/HPtATNtMJTuc9ikl8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23273},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"33f092b19ee167afb5bcee615ea5198182b5ce40","scripts":{"dev":"tsup src/index.ts --format esm,cjs --dts --watch","build":"tsup src/index.ts --format esm,cjs --dts --clean"},"_npmUser":{"name":"asyncinnovator","email":"sheth.rishu50@gmail.com"},"repository":{"url":"git+https://github.com/Asyncinnovator/hallint.git","type":"git"},"_npmVersion":"11.11.0","description":"Detect security and quality issues in AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"glob":"^10.3.0","chalk":"^5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hallint_0.1.3_1783513006460_0.6881809455231418","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@asyncinnovator/hallint","version":"0.1.4","keywords":["ai","static-analysis","security","linter","copilot","cursor","code-quality","hallint"],"license":"MIT","_id":"@asyncinnovator/hallint@0.1.4","maintainers":[{"name":"asyncinnovator","email":"sheth.rishu50@gmail.com"}],"homepage":"https://github.com/Asyncinnovator/hallint#readme","bugs":{"url":"https://github.com/Asyncinnovator/hallint/issues"},"dist":{"shasum":"0ca105420d5565ee68f97b8b7714fe088882774d","tarball":"https://registry.npmjs.org/@asyncinnovator/hallint/-/hallint-0.1.4.tgz","fileCount":6,"integrity":"sha512-BsdbwhtOL/uOdvJZolD8wv5JDCGTWI0KjDYqx/nuBydgREeG99VfBLekaO8KFmMGdtRkxHHPBpRmyCcdqpSEcg==","signatures":[{"sig":"MEQCIEGcsFaQZLuoral4yWLeo/abWBW+NTKbpb4iYC3YtQ61AiBxEeRFbdF2Rm2bs9EZhaz5qlJgbGkP3MakIFGeQf5mDw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27427},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"f5b6f4ad3cf9f3f6557439c6f676e300d58f48e0","scripts":{"dev":"tsup src/index.ts --format esm,cjs --dts --watch","build":"tsup src/index.ts --format esm,cjs --dts --clean"},"_npmUser":{"name":"asyncinnovator","email":"sheth.rishu50@gmail.com"},"repository":{"url":"git+https://github.com/Asyncinnovator/hallint.git","type":"git"},"_npmVersion":"11.11.0","description":"Detect security and quality issues in AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"glob":"^10.3.0","chalk":"^5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hallint_0.1.4_1783580343557_0.5094026314864581","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@asyncinnovator/hallint","version":"0.1.5","keywords":["ai","static-analysis","security","linter","copilot","cursor","code-quality","hallint"],"license":"MIT","_id":"@asyncinnovator/hallint@0.1.5","maintainers":[{"name":"asyncinnovator","email":"sheth.rishu50@gmail.com"}],"homepage":"https://github.com/Asyncinnovator/hallint#readme","bugs":{"url":"https://github.com/Asyncinnovator/hallint/issues"},"dist":{"shasum":"8c7d612b5b506dce65bfd9182cb570cca8435e21","tarball":"https://registry.npmjs.org/@asyncinnovator/hallint/-/hallint-0.1.5.tgz","fileCount":6,"integrity":"sha512-8yzWsTW3oDki6f9Wxi/gheWBEv0WLbxyDbfL3qDLtSZmaeumk65YBar0cIQ4NsqI6qPRbtcmlZKUCKWZRaS3Og==","signatures":[{"sig":"MEUCIBScIoTFLDY3j6uJsZWBylxUzTVABqkUXzg0kQ5S4qkNAiEAgwxoxPAgb05JAhXu9NGl56Cw+haCL/NjvNJw96np058=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27427},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"fba7307fd6d09e6855e1d17f629a7c1dac1235ea","scripts":{"dev":"tsup src/index.ts --format esm,cjs --dts --watch","build":"tsup src/index.ts --format esm,cjs --dts --clean"},"_npmUser":{"name":"asyncinnovator","email":"sheth.rishu50@gmail.com"},"repository":{"url":"git+https://github.com/Asyncinnovator/hallint.git","type":"git"},"_npmVersion":"11.11.0","description":"Detect security and quality issues in AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"glob":"^10.3.0","chalk":"^5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hallint_0.1.5_1783829854284_0.5283799373280873","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@asyncinnovator/hallint","version":"0.1.6","keywords":["ai","static-analysis","security","linter","copilot","cursor","code-quality","hallint"],"license":"MIT","_id":"@asyncinnovator/hallint@0.1.6","maintainers":[{"name":"asyncinnovator","email":"sheth.rishu50@gmail.com"}],"homepage":"https://github.com/Asyncinnovator/hallint#readme","bugs":{"url":"https://github.com/Asyncinnovator/hallint/issues"},"dist":{"shasum":"675116a3b550c6ffd86cee7458f355c08352aeb3","tarball":"https://registry.npmjs.org/@asyncinnovator/hallint/-/hallint-0.1.6.tgz","fileCount":6,"integrity":"sha512-XM8tOcTg8k5ePISBugcb70l3Y/jgwZ3pJGFwU1vRvAcEiqvM/9MBSDzeK5qJaUyb0E7Aqvb0KJU0x50YI6W+Qw==","signatures":[{"sig":"MEUCID9ybWUKDjEIDdxreECyvaYk/0l0IzPrFIgEN78ls4R2AiEAxdBIPtX+kHXv9cNrqB8osqsTRPY1I6pNLN2z/xcxMzs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27475},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"034741285978a62f4a5e4fc4cea98ac9030c98c0","scripts":{"dev":"tsup src/index.ts --format esm,cjs --dts --watch","build":"tsup src/index.ts --format esm,cjs --dts --clean"},"_npmUser":{"name":"asyncinnovator","email":"sheth.rishu50@gmail.com"},"repository":{"url":"git+https://github.com/Asyncinnovator/hallint.git","type":"git"},"_npmVersion":"11.11.0","description":"Detect security and quality issues in AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"glob":"^10.3.0","chalk":"^5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hallint_0.1.6_1783927209236_0.48355201832047867","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@asyncinnovator/hallint","version":"0.1.7","keywords":["ai","static-analysis","security","linter","copilot","cursor","code-quality","hallint"],"license":"MIT","_id":"@asyncinnovator/hallint@0.1.7","maintainers":[{"name":"asyncinnovator","email":"sheth.rishu50@gmail.com"}],"homepage":"https://github.com/Asyncinnovator/hallint#readme","bugs":{"url":"https://github.com/Asyncinnovator/hallint/issues"},"dist":{"shasum":"55391ca5501f5170dcb1d94703bac5ebd2b7f213","tarball":"https://registry.npmjs.org/@asyncinnovator/hallint/-/hallint-0.1.7.tgz","fileCount":6,"integrity":"sha512-xUeZgGamTyz8ZJvZ/Y/45zmupIEGuIAYGuegWa9CCrZOOpf+7R2l7f0E3BlmwyYSHngvUPn6CiMmnc+Ciw8v8A==","signatures":[{"sig":"MEUCIQCHRiPz77VNkJDL4xBRr27QSdy6Q3Cn3ktgu3hw6xDCUwIgXW0OZCBFJBdot9/MFAZVTDlwK42Ria5G+jk3Wtuukn0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29829},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"6f952eed6d00df842496833569b2ab7c802b6234","scripts":{"dev":"tsup src/index.ts --format esm,cjs --dts --watch","build":"tsup src/index.ts --format esm,cjs --dts --clean"},"_npmUser":{"name":"asyncinnovator","email":"sheth.rishu50@gmail.com"},"repository":{"url":"git+https://github.com/Asyncinnovator/hallint.git","type":"git"},"_npmVersion":"11.11.0","description":"Detect security and quality issues in AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"glob":"^10.3.0","chalk":"^5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hallint_0.1.7_1784016624121_0.03991583011571431","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@asyncinnovator/hallint","version":"0.1.8","keywords":["ai","static-analysis","security","linter","copilot","cursor","code-quality","hallint"],"license":"MIT","_id":"@asyncinnovator/hallint@0.1.8","maintainers":[{"name":"asyncinnovator","email":"sheth.rishu50@gmail.com"}],"homepage":"https://github.com/Asyncinnovator/hallint#readme","bugs":{"url":"https://github.com/Asyncinnovator/hallint/issues"},"dist":{"shasum":"e9048cfd70d588618dcce7539f707528a57a1489","tarball":"https://registry.npmjs.org/@asyncinnovator/hallint/-/hallint-0.1.8.tgz","fileCount":6,"integrity":"sha512-J6FGSHcsSupav3HjWaqVMVR3eIlb4/SkDicHU5dtxNdCXoibtDr9j9mUPRiXNr0cIsJIt1Z8a/Cr1CWbCkICcQ==","signatures":[{"sig":"MEUCIQDzVwef6VPfOQ3rUMMgKrZayIHEdqFqv3awrCz8M2hMIwIgRDErxP0sG/YUKPrx5ZT9qchDn9b11wwCCj6+YCZvLoQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29869},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"7cc23783e4b2fc968421a20b882c6cb81c36fcc1","scripts":{"dev":"tsup src/index.ts --format esm,cjs --dts --watch","build":"tsup src/index.ts --format esm,cjs --dts --clean"},"_npmUser":{"name":"asyncinnovator","email":"sheth.rishu50@gmail.com"},"repository":{"url":"git+https://github.com/Asyncinnovator/hallint.git","type":"git"},"_npmVersion":"11.11.0","description":"Detect security and quality issues in AI-generated code","directories":{},"_nodeVersion":"22.16.0","dependencies":{"glob":"^10.3.0","chalk":"^5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hallint_0.1.8_1784021801108_0.05917986430583233","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@asyncinnovator/hallint","version":"0.2.0","description":"Detect security and quality issues in AI-generated code","main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"build":"tsup src/index.ts --format esm,cjs --dts --clean","dev":"tsup src/index.ts --format esm,cjs --dts --watch"},"keywords":["ai","static-analysis","security","linter","copilot","cursor","code-quality","hallint"],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/Asyncinnovator/hallint.git"},"dependencies":{"glob":"^10.3.0","chalk":"^5.3.0"},"devDependencies":{"@types/node":"^20.0.0"},"gitHead":"f7c9890a21c471f02fc25d1c82e892696475c7fe","_id":"@asyncinnovator/hallint@0.2.0","bugs":{"url":"https://github.com/Asyncinnovator/hallint/issues"},"homepage":"https://github.com/Asyncinnovator/hallint#readme","_nodeVersion":"22.16.0","_npmVersion":"11.11.0","dist":{"integrity":"sha512-O2nTmXmUNvZ0PHU/qTIjf2RlIGXSYzVrf1EKe8loRLbJSasnuvsC8mtASzX8YdAF2Bh31DPcszJ8gGTA1Iv3Wg==","shasum":"4fb6e6a8425cb998a12f5dbec9f3711bcfca46fc","tarball":"https://registry.npmjs.org/@asyncinnovator/hallint/-/hallint-0.2.0.tgz","fileCount":7,"unpackedSize":56494,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDJYyr27q+U/3Iu9M1y+bC7VKJt7HSLehlrNqsYIs/IYAIgAYzsIQOQEsJSqO9edkSQ8+ZdviCt1enODvHLaZXiTUw="}]},"_npmUser":{"name":"asyncinnovator","email":"sheth.rishu50@gmail.com"},"directories":{},"maintainers":[{"name":"asyncinnovator","email":"sheth.rishu50@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/hallint_0.2.0_1784618485353_0.1596905492131382"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-07T07:28:54.118Z","modified":"2026-07-21T07:21:25.626Z","0.1.0":"2026-07-07T07:28:54.377Z","0.1.1":"2026-07-08T11:54:20.695Z","0.1.2":"2026-07-08T12:02:28.707Z","0.1.3":"2026-07-08T12:16:46.603Z","0.1.4":"2026-07-09T06:59:03.695Z","0.1.5":"2026-07-12T04:17:34.433Z","0.1.6":"2026-07-13T07:20:09.377Z","0.1.7":"2026-07-14T08:10:24.269Z","0.1.8":"2026-07-14T09:36:41.245Z","0.2.0":"2026-07-21T07:21:25.491Z"},"bugs":{"url":"https://github.com/Asyncinnovator/hallint/issues"},"license":"MIT","homepage":"https://github.com/Asyncinnovator/hallint#readme","keywords":["ai","static-analysis","security","linter","copilot","cursor","code-quality","hallint"],"repository":{"type":"git","url":"git+https://github.com/Asyncinnovator/hallint.git"},"description":"Detect security and quality issues in AI-generated code","maintainers":[{"name":"asyncinnovator","email":"sheth.rishu50@gmail.com"}],"readme":"# @asyncinnovator/hallint\r\n\r\n> Static analysis library for AI-generated code. Detects security and quality issues that AI coding assistants commonly introduce.\r\n\r\n[![npm](https://img.shields.io/npm/v/@asyncinnovator/hallint?color=crimson)](https://www.npmjs.com/package/@asyncinnovator/hallint)\r\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/Asyncinnovator/hallint/blob/main/LICENSE)\r\n[![Node](https://img.shields.io/badge/node-%3E%3D18-brightgreen)](https://nodejs.org)\r\n\r\n---\r\n\r\n## Install\r\n\r\n```bash\r\nnpm install @asyncinnovator/hallint\r\n```\r\n\r\n---\r\n\r\n## Usage\r\n\r\n### Scan files\r\n\r\n```ts\r\nimport { scan } from '@asyncinnovator/hallint'\r\n\r\nconst result = await scan({\r\n  files: ['./src/**/*.ts'],\r\n  rules: 'recommended',\r\n  minSeverity: 'high',\r\n  ignore: ['**/node_modules/**', '**/dist/**'],\r\n})\r\n\r\nresult.findings.forEach(f => {\r\n  console.log(`[${f.severity}] ${f.ruleId} — ${f.filePath}:${f.line}`)\r\n  console.log(`  ${f.message}`)\r\n  if (f.llmExplanation) console.log(`  → ${f.llmExplanation}`)\r\n})\r\n```\r\n\r\n### Scan a string in memory\r\n\r\nUseful for editor integrations, build plugins, or tests:\r\n\r\n```ts\r\nimport { scanSource } from '@asyncinnovator/hallint'\r\n\r\nconst findings = scanSource(\r\n  `const apiKey = \"sk-abc123defgh456789xyz\"`,\r\n  'virtual.ts'\r\n)\r\n\r\nfindings.forEach(f => console.log(f.ruleId, f.message))\r\n```\r\n\r\n---\r\n\r\n## API\r\n\r\n### `scan(config): Promise<ScanResult>`\r\n\r\n| Field | Type | Default | Description |\r\n|---|---|---|---|\r\n| `files` | `string \\| string[]` | — | Paths, globs, or directories |\r\n| `rules` | `'recommended' \\| 'all' \\| Rule[]` | `'recommended'` | Rule set to run |\r\n| `minSeverity` | `Severity` | `'info'` | Skip findings below this level |\r\n| `ignore` | `string[]` | `[]` | Glob patterns to exclude |\r\n| `publicRoutes` | `Array<string \\| RegExp>` | `[]` | Route paths exempt from `missing-auth-check` |\r\n| `llm` | `LLMConfig` | — | Optional LLM layer for plain-English explanations |\r\n\r\n### `scanSource(source, filePath, config?): Finding[]`\r\n\r\nScans a source string directly without touching the file system.\r\n\r\n### `ScanResult`\r\n\r\n```ts\r\n{\r\n  findings:     Finding[]\r\n  scannedFiles: string[]\r\n  durationMs:   number\r\n  summary:      Record<'critical' | 'high' | 'medium' | 'low' | 'info', number>\r\n}\r\n```\r\n\r\n### `Finding`\r\n\r\n```ts\r\n{\r\n  ruleId:          string   // e.g. \"hardcoded-secret\"\r\n  severity:        string   // \"critical\" | \"high\" | \"medium\" | \"low\" | \"info\"\r\n  message:         string\r\n  fix?:            string\r\n  filePath:        string\r\n  line:            number\r\n  snippet?:        string\r\n  llmExplanation?: string   // populated when config.llm is set\r\n}\r\n```\r\n\r\n### `LLMConfig`\r\n\r\n```ts\r\n{\r\n  provider: 'openai' | 'anthropic' | 'ollama'\r\n  model?:   string\r\n  apiKey?:  string\r\n  baseUrl?: string   // Ollama only, default: http://localhost:11434\r\n}\r\n```\r\n\r\n---\r\n\r\n## Rules\r\n\r\n| Rule | Severity | What it catches |\r\n|---|---|---|\r\n| `hardcoded-secret` | critical | API keys, tokens, and known token prefixes (`ghp_`, `sk-`, `AKIA`, `xoxb-`, and more) |\r\n| `sql-injection` | critical | User input interpolated into SQL queries |\r\n| `unsafe-eval` | critical | `eval()` or `new Function()` with dynamic input |\r\n| `auth-masking` | critical | Catch blocks that swallow auth errors, allowing failed auth to silently pass |\r\n| `missing-auth-check` | high | Route handlers with no auth middleware |\r\n| `xss-innerHTML` | high | Non-literal values assigned to `.innerHTML` |\r\n| `permissive-cors` | high | `cors({ origin: '*' })` in route handlers |\r\n| `jwt-in-localstorage` | high | JWT or auth tokens stored in `localStorage` |\r\n| `swallowed-error` | high | Empty or comment-only catch blocks |\r\n| `http-not-https` | medium | Hardcoded `http://` URLs in fetch/axios calls |\r\n| `async-no-catch` | medium | `async` functions with no error handling (`--rules all` only) |\r\n\r\n### Examples\r\n\r\n**hardcoded-secret:**\r\n\r\n```ts\r\n// ✖ detected\r\nconst apiKey = \"ghp_abc123def456ghi789jklmno\"\r\n\r\n// ✔ not flagged\r\nconst apiKey = process.env.GITHUB_TOKEN\r\n```\r\n\r\n**sql-injection:**\r\n\r\n```ts\r\n// ✖ detected — template literal\r\nconst result = await db.query(`SELECT * FROM users WHERE id = ${req.params.id}`)\r\n\r\n// ✔ not flagged — parameterised\r\nconst result = await db.query('SELECT * FROM users WHERE id = $1', [req.params.id])\r\n```\r\n\r\n**missing-auth-check:**\r\n\r\n```ts\r\n// ✖ detected\r\nrouter.post('/admin/delete', async (req, res) => { ... })\r\n\r\n// ✔ not flagged\r\nrouter.post('/admin/delete', authenticate, async (req, res) => { ... })\r\n```\r\n\r\n**jwt-in-localstorage:**\r\n\r\n```ts\r\n// ✖ detected\r\nlocalStorage.setItem('token', jwtToken)\r\n\r\n// ✔ not flagged\r\nlocalStorage.setItem('theme', 'dark')\r\n```\r\n\r\n**swallowed-error:**\r\n\r\n```ts\r\n// ✖ detected — empty catch\r\ntry {\r\n  await db.query(sql)\r\n} catch (e) {\r\n}\r\n\r\n// ✔ not flagged\r\n} catch (e) {\r\n  console.error(e)\r\n}\r\n```\r\n\r\n**auth-masking:**\r\n\r\n```ts\r\n// ✖ detected — auth error swallowed\r\ntry {\r\n  await verifyToken(req.headers.authorization)\r\n} catch (e) {\r\n  next()\r\n}\r\n\r\n// ✔ not flagged\r\n} catch (e) {\r\n  return res.status(401).json({ error: 'Unauthorized' })\r\n}\r\n```\r\n\r\n---\r\n\r\n## Inline Suppression\r\n\r\n```ts\r\n// Suppress all rules on this line\r\nconst key = \"sk-abc123abc123abc123abc\"  // hallint-disable\r\n\r\n// Suppress a specific rule on this line\r\nconst key = \"sk-abc123abc123abc123abc\"  // hallint-disable hardcoded-secret\r\n\r\n// Suppress all rules on the next line\r\n// hallint-disable-next-line\r\nconst key = \"sk-abc123abc123abc123abc\"\r\n\r\n// Suppress a block\r\n// hallint-disable-block\r\nconst key1 = \"sk-abc123abc123abc123abc\"\r\nconst key2 = \"ghp_abc123abc123abc123abc\"\r\n// hallint-enable-block\r\n```\r\n\r\n---\r\n\r\n## Public Route Allowlist\r\n\r\n```ts\r\nawait scan({\r\n  files: './src',\r\n  publicRoutes: ['/health', '/login', '/register', /^\\/api\\/docs/],\r\n})\r\n```\r\n\r\nRoutes matching any entry are excluded from `missing-auth-check`. Supports exact strings and regex patterns.\r\n\r\nYou can also mark individual routes inline:\r\n\r\n```ts\r\n// public\r\napp.get('/health', (_req, res) => res.send('ok'))\r\n\r\n// hallint-public\r\nrouter.get('/status', (_req, res) => res.json({ status: 'up' }))\r\n```\r\n\r\n---\r\n\r\n## LLM Layer\r\n\r\n```ts\r\nawait scan({\r\n  files: './src',\r\n  llm: {\r\n    provider: 'anthropic',   // 'openai' | 'anthropic' | 'ollama'\r\n    model: 'claude-haiku-4-5',\r\n    apiKey: process.env.ANTHROPIC_API_KEY,\r\n  },\r\n})\r\n```\r\n\r\nEach finding gets an `llmExplanation` field. LLM errors are silently ignored — findings are always returned regardless.\r\n\r\n**Ollama (no API key required):**\r\n```ts\r\nllm: { provider: 'ollama', model: 'llama3', baseUrl: 'http://localhost:11434' }\r\n```\r\n\r\n---\r\n\r\n## Custom rules\r\n\r\n```ts\r\nimport type { Rule } from '@asyncinnovator/hallint'\r\n\r\nconst noConsoleLog: Rule = {\r\n  id: 'no-console-log',\r\n  severity: 'low',\r\n  languages: ['js', 'ts'],\r\n  layer: 'regex',\r\n  pattern: /\\bconsole\\.log\\s*\\(/,\r\n  message: 'console.log left in production code',\r\n  fix: 'Remove or replace with a structured logger.',\r\n}\r\n\r\nawait scan({ files: './src', rules: [noConsoleLog] })\r\n```\r\n\r\n---\r\n\r\n## Links\r\n\r\n- [GitHub](https://github.com/Asyncinnovator/hallint)\r\n- [CLI package — @asyncinnovator/hallint-cli](https://www.npmjs.com/package/@asyncinnovator/hallint-cli)\r\n- [MIT License](https://github.com/Asyncinnovator/hallint/blob/main/LICENSE)","readmeFilename":"README.md"}