{"_id":"prodlint","_rev":"22-444c2c1379a87db6577b06965eeb981e","name":"prodlint","dist-tags":{"latest":"0.10.0"},"versions":{"0.1.0":{"name":"prodlint","version":"0.1.0","keywords":["lint","linter","security","ai","vibe-coding","production-readiness","code-quality","next.js","react","typescript","static-analysis"],"author":{"name":"prodlint contributors"},"license":"MIT","_id":"prodlint@0.1.0","maintainers":[{"name":"prodlint","email":"marcovecchioanthony@gmail.com"}],"homepage":"https://github.com/prodlint/prodlint#readme","bugs":{"url":"https://github.com/prodlint/prodlint/issues"},"bin":{"prodlint":"dist/cli.js"},"dist":{"shasum":"591f8c9da6e8a253a166227a09be4e51f3cacecd","tarball":"https://registry.npmjs.org/prodlint/-/prodlint-0.1.0.tgz","fileCount":8,"integrity":"sha512-M8P/30WnHmm01Jb0UkOPmO9x+KbTfIbM3P/AMJwFHwVRl9Kgc2PSHxaulg3NEz2miiIV4EAcGFTCaH6CLDaaMg==","signatures":[{"sig":"MEYCIQDorVTgXlXxKa4rgtX3+xJ1QAMv+9dQ+uca4T49sSXyjQIhAPfK22ld7XAPLxo7eojUUWhEpsLv77x82MPi60+VUyBv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":204915},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"48918aea3d1aa7ea76e0a6d545e57f0b81e72aa8","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"prodlint","email":"marcovecchioanthony@gmail.com"},"deprecated":"Security fixes in v0.2.1. Please upgrade.","repository":{"url":"git+https://github.com/prodlint/prodlint.git","type":"git"},"_npmVersion":"10.9.0","description":"Scan AI-generated projects for production readiness issues","directories":{},"_nodeVersion":"22.12.0","dependencies":{"fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.2.3"},"_npmOperationalInternal":{"tmp":"tmp/prodlint_0.1.0_1771207132034_0.02877333912162605","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"prodlint","version":"0.2.0","keywords":["lint","linter","security","ai","vibe-coding","production-readiness","code-quality","next.js","react","typescript","static-analysis","mcp","mcp-server"],"author":{"name":"prodlint contributors"},"license":"MIT","_id":"prodlint@0.2.0","maintainers":[{"name":"prodlint","email":"marcovecchioanthony@gmail.com"}],"homepage":"https://github.com/prodlint/prodlint#readme","bugs":{"url":"https://github.com/prodlint/prodlint/issues"},"bin":{"prodlint":"dist/cli.js","prodlint-mcp":"dist/mcp.js"},"dist":{"shasum":"d0f2da48f71cee97bbfdeaf948504f276bc3c110","tarball":"https://registry.npmjs.org/prodlint/-/prodlint-0.2.0.tgz","fileCount":11,"integrity":"sha512-PR5CZPDeiNp+T9PR3e97F/6FKsyC6dfGT7MhdROGz5xH/KzbsmnO34bCHemms/hSXF3Cp/x7tKbfJiztRutOTA==","signatures":[{"sig":"MEYCIQDRUCQ50MHLQ//jl7n0pGtyInLf0KJYywijRogxzN4o0AIhAOHYN67hhXmJPWQvouVRcJ4ieziWQEElE4bmEsu8gPxK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1692109},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"1df8efbca0b9d44661cf9825934599302823ebe7","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"prodlint","email":"marcovecchioanthony@gmail.com"},"deprecated":"Security fixes in v0.2.1. Please upgrade.","repository":{"url":"git+https://github.com/prodlint/prodlint.git","type":"git"},"_npmVersion":"10.9.0","description":"Scan AI-generated projects for production readiness issues","directories":{},"_nodeVersion":"22.12.0","dependencies":{"fast-glob":"^3.3.3","picocolors":"^1.1.1","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.2.3"},"_npmOperationalInternal":{"tmp":"tmp/prodlint_0.2.0_1771208682220_0.30829485399064227","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"prodlint","version":"0.2.1","keywords":["lint","linter","security","ai","vibe-coding","production-readiness","code-quality","next.js","react","typescript","static-analysis","mcp","mcp-server"],"author":{"name":"prodlint contributors"},"license":"MIT","_id":"prodlint@0.2.1","maintainers":[{"name":"prodlint","email":"marcovecchioanthony@gmail.com"}],"homepage":"https://github.com/prodlint/prodlint#readme","bugs":{"url":"https://github.com/prodlint/prodlint/issues"},"bin":{"prodlint":"dist/cli.js","prodlint-mcp":"dist/mcp.js"},"dist":{"shasum":"1694e3938360f8b4fea2c911e48e5c8ea25ef0b1","tarball":"https://registry.npmjs.org/prodlint/-/prodlint-0.2.1.tgz","fileCount":11,"integrity":"sha512-1RQtxuXe+9qM6tJpZUNlVIzbDRIvVrTzSHlQE3RUxwXRSq2GGEJKxms9KLVRYxMl+5gHLbIRGgt9h/W5JVk2JA==","signatures":[{"sig":"MEUCIGSMozGmHdBY7xncl1f42a1Dfp0i78vpPALj7A1HH+3NAiEAmggc1ABGpkTjOCQ2HJY15QW2zO1QelFNhBcPLYysUIY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":312821},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"58fc0d11fdc726a07a54d634cc3782438b31be07","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"prodlint","email":"marcovecchioanthony@gmail.com"},"repository":{"url":"git+https://github.com/prodlint/prodlint.git","type":"git"},"_npmVersion":"10.9.0","description":"Scan AI-generated projects for production readiness issues","directories":{},"_nodeVersion":"22.12.0","dependencies":{"zod":"^4.3.6","fast-glob":"^3.3.3","picocolors":"^1.1.1","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.2.3"},"_npmOperationalInternal":{"tmp":"tmp/prodlint_0.2.1_1771227803218_0.12066427031225668","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"prodlint","version":"0.2.2","keywords":["lint","linter","security","ai","ai-code","vibe-coding","production-readiness","code-quality","code-scanner","next.js","react","typescript","static-analysis","cli","scanner","mcp","mcp-server","cursor","copilot","devtools"],"author":{"name":"prodlint contributors"},"license":"MIT","_id":"prodlint@0.2.2","maintainers":[{"name":"prodlint","email":"marcovecchioanthony@gmail.com"}],"homepage":"https://prodlint.com","bugs":{"url":"https://github.com/prodlint/prodlint/issues"},"bin":{"prodlint":"dist/cli.js","prodlint-mcp":"dist/mcp.js"},"dist":{"shasum":"be97d2c14edff35bd4fb571eb7b677ee3cbb51e3","tarball":"https://registry.npmjs.org/prodlint/-/prodlint-0.2.2.tgz","fileCount":8,"integrity":"sha512-ykobTejRFw4NIQBZVXhO5SxVXCBdzYUkKN1pOtY8R3iyR1hYl/pHuly1X+Vdh0blXMP22Xrir8ampLpcCxqKqg==","signatures":[{"sig":"MEQCIBXDTuU6AV33QUbOjhq6vCZI++8zVOuZ+eWP9zuiT3vzAiAz36q/2ZV0FwXPNwFDY5voKA3/rP/zjIUXI1ahMiZz0g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":116026},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"9c6101d9f7de8e7bcf56afcbd4ce455bea140b99","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"prodlint","email":"marcovecchioanthony@gmail.com"},"repository":{"url":"git+https://github.com/prodlint/prodlint.git","type":"git"},"_npmVersion":"10.9.0","description":"Scan AI-generated projects for production readiness issues","directories":{},"_nodeVersion":"22.12.0","dependencies":{"zod":"^4.3.6","fast-glob":"^3.3.3","picocolors":"^1.1.1","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.2.3"},"_npmOperationalInternal":{"tmp":"tmp/prodlint_0.2.2_1771231410014_0.03797599534688301","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"prodlint","version":"0.3.0","keywords":["lint","linter","security","ai","ai-code","vibe-coding","production-readiness","code-quality","code-scanner","next.js","react","typescript","static-analysis","cli","scanner","mcp","mcp-server","cursor","copilot","devtools"],"author":{"name":"prodlint contributors"},"license":"MIT","_id":"prodlint@0.3.0","maintainers":[{"name":"prodlint","email":"marcovecchioanthony@gmail.com"}],"homepage":"https://prodlint.com","bugs":{"url":"https://github.com/prodlint/prodlint/issues"},"bin":{"prodlint":"dist/cli.js","prodlint-mcp":"dist/mcp.js"},"dist":{"shasum":"be7d15e9fc28f4202dfdbd9754d067947f276d03","tarball":"https://registry.npmjs.org/prodlint/-/prodlint-0.3.0.tgz","fileCount":8,"integrity":"sha512-KrGNb1k3weTZVNAmnWIer/RN6NMTwaBBCl2dAlKyWFY79gIe+jee8jUvjAVGpJ1bJyyzzHfNugcENL+VF8O/XQ==","signatures":[{"sig":"MEQCIBgT6PH5kPLorev7MZb8/+jjwa1OK2TtaOGOradVEjG3AiB0/781vuTGUC9Y0xCR0ocn1Eby3lvUKSur1hje75ExCQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":232965},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"54fd964503e13e29769c9acfd38ed56da0d50ec7","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"prodlint","email":"marcovecchioanthony@gmail.com"},"repository":{"url":"git+https://github.com/prodlint/prodlint.git","type":"git"},"_npmVersion":"10.9.0","description":"Scan AI-generated projects for production readiness issues","directories":{},"_nodeVersion":"22.12.0","dependencies":{"zod":"^4.3.6","fast-glob":"^3.3.3","picocolors":"^1.1.1","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.2.3"},"_npmOperationalInternal":{"tmp":"tmp/prodlint_0.3.0_1771392220742_0.9436459839053624","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"prodlint","version":"0.3.1","keywords":["lint","linter","security","ai","ai-code","vibe-coding","production-readiness","code-quality","code-scanner","next.js","react","typescript","static-analysis","cli","scanner","mcp","mcp-server","cursor","copilot","devtools"],"author":{"name":"prodlint contributors"},"license":"MIT","_id":"prodlint@0.3.1","maintainers":[{"name":"prodlint","email":"marcovecchioanthony@gmail.com"}],"homepage":"https://prodlint.com","bugs":{"url":"https://github.com/prodlint/prodlint/issues"},"bin":{"prodlint":"dist/cli.js","prodlint-mcp":"dist/mcp.js"},"dist":{"shasum":"3c7e295ec8a9b24302377a4ecdc8159b3cc5d1c6","tarball":"https://registry.npmjs.org/prodlint/-/prodlint-0.3.1.tgz","fileCount":8,"integrity":"sha512-plJjatLGsb9VxSxsYt4/WsEe++5+3QKntxTTOrLNKzeluN6aRWg9c7vZ79ZZojQYkp1wmox/gWyP8vH+MArVsg==","signatures":[{"sig":"MEUCIBG9AFlRVzY3ZWfl/7CJGf190D55E1CC6oCV8mC4mgIRAiEArVTHlvk2V19+OTvFLhJElBoCJmF8b8l1F15/5qD0YWk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":233487},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"import":"./dist/mcp.js"}},"gitHead":"7e66b9efcfe21d5f1bd1b2b85eddeef6d8f25ec7","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"prodlint","email":"marcovecchioanthony@gmail.com"},"repository":{"url":"git+https://github.com/prodlint/prodlint.git","type":"git"},"_npmVersion":"10.9.0","description":"Scan AI-generated projects for production readiness issues","directories":{},"_nodeVersion":"22.12.0","dependencies":{"zod":"^4.3.6","fast-glob":"^3.3.3","picocolors":"^1.1.1","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.2.3"},"_npmOperationalInternal":{"tmp":"tmp/prodlint_0.3.1_1771394650449_0.8642351025647856","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"prodlint","version":"0.5.0","keywords":["lint","linter","security","ai","ai-code","vibe-coding","production-readiness","code-quality","code-scanner","next.js","react","typescript","static-analysis","cli","scanner","mcp","mcp-server","cursor","copilot","devtools"],"author":{"name":"prodlint contributors"},"license":"MIT","_id":"prodlint@0.5.0","maintainers":[{"name":"prodlint","email":"marcovecchioanthony@gmail.com"}],"homepage":"https://prodlint.com","bugs":{"url":"https://github.com/prodlint/prodlint/issues"},"bin":{"prodlint":"dist/cli.js","prodlint-mcp":"dist/mcp.js"},"dist":{"shasum":"bf5872cfa713d1b1cd28083390e9f1920b7203dc","tarball":"https://registry.npmjs.org/prodlint/-/prodlint-0.5.0.tgz","fileCount":8,"integrity":"sha512-9yDAMpdrqcwDrhyFikJJRiz/1K5z+NnkYvstYT5rICE2Hkm2HlpyMaZjR4RUnbRDw5wr1suN1+PbMV//GPfjsg==","signatures":[{"sig":"MEUCIQCv3BqRLE2ZZ6xX/D5mwJXhVdjlG6uPw0cA9awZe6Q77AIgQHUXA7nUMehMSl/PSPja2BOSZD4td/yaZqbA3uiobjw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":294094},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"import":"./dist/mcp.js"}},"gitHead":"c9a53c3b5cd93ba91ab171490e04ff7b88897f4b","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"prodlint","email":"marcovecchioanthony@gmail.com"},"repository":{"url":"git+https://github.com/prodlint/prodlint.git","type":"git"},"_npmVersion":"10.9.0","description":"Scan AI-generated projects for production readiness issues","directories":{},"_nodeVersion":"22.12.0","dependencies":{"zod":"^4.3.6","fast-glob":"^3.3.3","picocolors":"^1.1.1","@babel/types":"^7.29.0","@babel/parser":"^7.29.0","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.2.3"},"_npmOperationalInternal":{"tmp":"tmp/prodlint_0.5.0_1771477624160_0.36921128836999895","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"prodlint","version":"0.6.0","keywords":["lint","linter","security","ai","ai-code","vibe-coding","production-readiness","code-quality","code-scanner","next.js","react","typescript","static-analysis","cli","scanner","mcp","mcp-server","cursor","copilot","devtools"],"author":{"name":"prodlint contributors"},"license":"MIT","_id":"prodlint@0.6.0","maintainers":[{"name":"prodlint","email":"marcovecchioanthony@gmail.com"}],"homepage":"https://prodlint.com","bugs":{"url":"https://github.com/prodlint/prodlint/issues"},"bin":{"prodlint":"dist/cli.js","prodlint-mcp":"dist/mcp.js"},"dist":{"shasum":"0955a3e6c9e7397f8d1c8b1a461b669d88f7255b","tarball":"https://registry.npmjs.org/prodlint/-/prodlint-0.6.0.tgz","fileCount":8,"integrity":"sha512-OtRLghGOipox6JexWTkXj5khGaqUNmhqc5Wamr1FPCkd7HoHngUff23oce7AzHNG4SdLhFqvQ3oRmNV7HdSdCg==","signatures":[{"sig":"MEUCIQC9vSh/ZEAVdEORR3STjzD5ukFbSiK70UF+UdOS87QgcgIgJfFW8h/VOKwTvi0Etcob51UwUz7Nadvp/61tOetH1dQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":414393},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"import":"./dist/mcp.js"}},"gitHead":"5650967ef87862583181f3beff1dfbf961147806","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"prodlint","email":"marcovecchioanthony@gmail.com"},"repository":{"url":"git+https://github.com/prodlint/prodlint.git","type":"git"},"_npmVersion":"10.9.0","description":"The linter for vibe-coded apps — catch what AI coding tools miss","directories":{},"_nodeVersion":"22.12.0","dependencies":{"zod":"^4.3.6","fast-glob":"^3.3.3","picocolors":"^1.1.1","@babel/types":"^7.29.0","@babel/parser":"^7.29.0","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.2.3"},"_npmOperationalInternal":{"tmp":"tmp/prodlint_0.6.0_1771482393106_0.8887521849729858","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"prodlint","version":"0.7.0","keywords":["lint","linter","security","ai","ai-code","vibe-coding","production-readiness","code-quality","code-scanner","next.js","react","typescript","static-analysis","cli","scanner","mcp","mcp-server","cursor","copilot","devtools"],"author":{"name":"prodlint contributors"},"license":"MIT","_id":"prodlint@0.7.0","maintainers":[{"name":"prodlint","email":"marcovecchioanthony@gmail.com"}],"homepage":"https://prodlint.com","bugs":{"url":"https://github.com/prodlint/prodlint/issues"},"bin":{"prodlint":"dist/cli.js","prodlint-mcp":"dist/mcp.js"},"dist":{"shasum":"91bf43f99e64821b99d1e06833d2b473dbcd3e0a","tarball":"https://registry.npmjs.org/prodlint/-/prodlint-0.7.0.tgz","fileCount":8,"integrity":"sha512-6J//lPXdxF04Sz0GFkFDswCBhGZTYJ/z4fE8guOTuvcHW4JkQSwc8yrms+MtyqzHqDSlKgCF1jxVqkM+aW4OQg==","signatures":[{"sig":"MEUCIQDtQO/5X6/ZNC+MbxNcy0oA2l+hizK/NnjCpY9mKuN57gIgOR2/vtb1v4IYSxAxpjexTXg468P709NkN1hZWND3x/w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":479784},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"import":"./dist/mcp.js"}},"gitHead":"5650967ef87862583181f3beff1dfbf961147806","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"prodlint","email":"marcovecchioanthony@gmail.com"},"repository":{"url":"git+https://github.com/prodlint/prodlint.git","type":"git"},"_npmVersion":"10.9.0","description":"The linter for vibe-coded apps — catch what AI coding tools miss","directories":{},"_nodeVersion":"22.12.0","dependencies":{"zod":"^4.3.6","fast-glob":"^3.3.3","picocolors":"^1.1.1","@babel/types":"^7.29.0","@babel/parser":"^7.29.0","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.2.3"},"_npmOperationalInternal":{"tmp":"tmp/prodlint_0.7.0_1771510163078_0.6614453318495817","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"prodlint","version":"0.7.1","keywords":["lint","linter","security","ai","ai-code","vibe-coding","production-readiness","code-quality","code-scanner","next.js","react","typescript","static-analysis","cli","scanner","mcp","mcp-server","cursor","copilot","devtools"],"author":{"name":"prodlint contributors"},"license":"MIT","_id":"prodlint@0.7.1","maintainers":[{"name":"prodlint","email":"marcovecchioanthony@gmail.com"}],"homepage":"https://prodlint.com","bugs":{"url":"https://github.com/prodlint/prodlint/issues"},"bin":{"prodlint":"dist/cli.js","prodlint-mcp":"dist/mcp.js"},"dist":{"shasum":"aa6ab536df7bc4a493b9299dcc81e5c84a11248c","tarball":"https://registry.npmjs.org/prodlint/-/prodlint-0.7.1.tgz","fileCount":8,"integrity":"sha512-eU1q3ONC8uJ5Do2ociL6Q4gjhh5Axl2hhao7zHZr4ANagzuB+VtBvqbl7cpWyxh8uJf14n01JuxkZPuDHHcLcQ==","signatures":[{"sig":"MEUCIQDUXBxSs1qHtScZ4Rsp9JFPHba7cBgPH4A+qPhPiD67pAIgQLzLXhoiptSxWcsknkr+0S4KkeUikhHom/8FIqOH2kk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/prodlint@0.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":494086},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"import":"./dist/mcp.js"}},"gitHead":"b439b9c599ccbaf53c222eb4e0944a471830369e","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"prodlint","email":"marcovecchioanthony@gmail.com"},"repository":{"url":"git+https://github.com/prodlint/prodlint.git","type":"git"},"_npmVersion":"10.9.4","description":"The linter for vibe-coded apps — catch what AI coding tools miss","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":"^4.3.6","fast-glob":"^3.3.3","picocolors":"^1.1.1","@babel/types":"^7.29.0","@babel/parser":"^7.29.0","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.2.3"},"_npmOperationalInternal":{"tmp":"tmp/prodlint_0.7.1_1771550735009_0.1883650823065881","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"prodlint","version":"0.7.2","keywords":["lint","linter","security","ai","ai-code","vibe-coding","production-readiness","code-quality","code-scanner","next.js","react","typescript","static-analysis","cli","scanner","mcp","mcp-server","cursor","copilot","v0","bolt","windsurf","claude","github-action","eslint-alternative","devtools"],"author":{"name":"prodlint contributors"},"license":"MIT","_id":"prodlint@0.7.2","maintainers":[{"name":"prodlint","email":"marcovecchioanthony@gmail.com"}],"homepage":"https://prodlint.com","bugs":{"url":"https://github.com/prodlint/prodlint/issues"},"bin":{"prodlint":"dist/cli.js","prodlint-mcp":"dist/mcp.js"},"dist":{"shasum":"dc9a92949a24b250c48e2867ef4a2b198914dbe2","tarball":"https://registry.npmjs.org/prodlint/-/prodlint-0.7.2.tgz","fileCount":8,"integrity":"sha512-dikwYlML51fKDypy6nmu+fd1Zv25GOkEkGOPDY1tj86bvjFq7nzA2ycaeJLTDWRuYWFmqQknHmN1go87eXWBPQ==","signatures":[{"sig":"MEUCIHVHXvErc4qksNb48w+bxdZq80UGcukxBVZGCus7bKN0AiEA3ma15HoZGNLyF5WzbA4TKg+CsIYz/ynXAfrYz3Uu4FQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":495287},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"import":"./dist/mcp.js"}},"gitHead":"cda1c929a1bfd0983e4cb1ff80100e719f02d3ff","mcpName":"io.github.Anthony-Marcovecchio/prodlint","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"prodlint","email":"marcovecchioanthony@gmail.com"},"repository":{"url":"git+https://github.com/prodlint/prodlint.git","type":"git"},"_npmVersion":"10.9.0","description":"The linter for vibe-coded apps — catch what AI coding tools miss","directories":{},"_nodeVersion":"22.12.0","dependencies":{"zod":"^4.3.6","fast-glob":"^3.3.3","picocolors":"^1.1.1","@babel/types":"^7.29.0","@babel/parser":"^7.29.0","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.2.3"},"_npmOperationalInternal":{"tmp":"tmp/prodlint_0.7.2_1771656439642_0.547074000492473","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"prodlint","version":"0.8.0","keywords":["lint","linter","security","ai","ai-code","vibe-coding","production-readiness","code-quality","code-scanner","next.js","react","typescript","static-analysis","cli","scanner","mcp","mcp-server","cursor","copilot","v0","bolt","windsurf","claude","github-action","eslint-alternative","devtools"],"author":{"name":"prodlint contributors"},"license":"MIT","_id":"prodlint@0.8.0","maintainers":[{"name":"prodlint","email":"marcovecchioanthony@gmail.com"}],"homepage":"https://prodlint.com","bugs":{"url":"https://github.com/prodlint/prodlint/issues"},"bin":{"prodlint":"dist/cli.js","prodlint-mcp":"dist/mcp.js"},"dist":{"shasum":"a61df61c5599ac652a37f03761d1b9c44a9e8a75","tarball":"https://registry.npmjs.org/prodlint/-/prodlint-0.8.0.tgz","fileCount":8,"integrity":"sha512-g/6gE/+IGCuukZO3ld4Ngp44Z1W0De5brKvUdPAYTlgob3XP3AmekwGMWyZlkiILXNp+P6AXciLE/5NUHj1n8A==","signatures":[{"sig":"MEUCIQDWhztKMtnaykltqAQqcluEWxs9PWY00CPSdFZ6LAxodQIgRPdT0K+48f1pSTDMTWObZXbJo6bPDcYV4h3WvBCDrFo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":547190},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"import":"./dist/mcp.js"}},"gitHead":"a05225546ee0908d73812caf253840ef671b96b7","mcpName":"io.github.Anthony-Marcovecchio/prodlint","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"prodlint","email":"marcovecchioanthony@gmail.com"},"repository":{"url":"git+https://github.com/prodlint/prodlint.git","type":"git"},"_npmVersion":"10.9.0","description":"Production readiness for vibe-coded apps — know your AI code is ready to ship","directories":{},"_nodeVersion":"22.12.0","dependencies":{"zod":"^4.3.6","fast-glob":"^3.3.3","picocolors":"^1.1.1","@babel/types":"^7.29.0","@babel/parser":"^7.29.0","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.2.3"},"_npmOperationalInternal":{"tmp":"tmp/prodlint_0.8.0_1771735560525_0.5874634574305488","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"prodlint","version":"0.8.1","keywords":["lint","linter","security","ai","ai-code","vibe-coding","production-readiness","code-quality","code-scanner","next.js","react","typescript","static-analysis","cli","scanner","mcp","mcp-server","cursor","copilot","v0","bolt","windsurf","claude","github-action","eslint-alternative","devtools"],"author":{"name":"prodlint contributors"},"license":"MIT","_id":"prodlint@0.8.1","maintainers":[{"name":"prodlint","email":"marcovecchioanthony@gmail.com"}],"homepage":"https://prodlint.com","bugs":{"url":"https://github.com/prodlint/prodlint/issues"},"bin":{"prodlint":"dist/cli.js","prodlint-mcp":"dist/mcp.js"},"dist":{"shasum":"4ffe3429c99dd88bb9bd23c809a81b1b50fb2370","tarball":"https://registry.npmjs.org/prodlint/-/prodlint-0.8.1.tgz","fileCount":8,"integrity":"sha512-IchUrZS4j2vYA7EY8SY2ifZ0Yvo5dQ5EJG92ctChcV5HQgaB4S0S9SI3mUp7vlS2kVjWyQUoleXpSZRJmLXORw==","signatures":[{"sig":"MEYCIQCBy3wk1QiX+YPLJDxlaermomPMyecSZBmiFChOWZ2roQIhAKZ8b74tNsL18a5b01i+UOUc916CFRmg4ioxN9378VSd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":550367},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"import":"./dist/mcp.js"}},"gitHead":"ed577e71766bf90e8b29c741b46afc8905a05980","mcpName":"io.github.Anthony-Marcovecchio/prodlint","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"prodlint","email":"marcovecchioanthony@gmail.com"},"repository":{"url":"git+https://github.com/prodlint/prodlint.git","type":"git"},"_npmVersion":"10.9.0","description":"Production readiness for vibe-coded apps — know your AI code is ready to ship","directories":{},"_nodeVersion":"22.12.0","dependencies":{"zod":"^4.3.6","fast-glob":"^3.3.3","picocolors":"^1.1.1","@babel/types":"^7.29.0","@babel/parser":"^7.29.0","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.2.3"},"_npmOperationalInternal":{"tmp":"tmp/prodlint_0.8.1_1771737012321_0.8154575914840987","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"prodlint","version":"0.9.0","keywords":["lint","linter","security","ai","ai-code","vibe-coding","production-readiness","code-quality","code-scanner","next.js","react","typescript","static-analysis","cli","scanner","mcp","mcp-server","cursor","copilot","v0","bolt","windsurf","claude","github-action","eslint-alternative","devtools"],"author":{"name":"prodlint contributors"},"license":"MIT","_id":"prodlint@0.9.0","maintainers":[{"name":"prodlint","email":"marcovecchioanthony@gmail.com"}],"homepage":"https://prodlint.com","bugs":{"url":"https://github.com/prodlint/prodlint/issues"},"bin":{"prodlint":"dist/cli.js","prodlint-mcp":"dist/mcp.js"},"dist":{"shasum":"33723d9c5e9225b2a2ca6a0f96550419b8ff7426","tarball":"https://registry.npmjs.org/prodlint/-/prodlint-0.9.0.tgz","fileCount":8,"integrity":"sha512-MLSX2umGfnRYJtqEcCnzxPQEqokoujVa+01walz5epH/Z1bNPGOZm0Dp817BhOaMhbN3Swq2nDeZzTC1t2yeww==","signatures":[{"sig":"MEUCIQDuG97ChIiycAR/nfyLqKMvOF1D8zq5mDkNJZo1r0yrugIgBJzcTYNw1PQtu2rexMCpP0FRBlH9xvmJdeJQB98kWRc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":569527},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"import":"./dist/mcp.js"}},"gitHead":"a42c58773ab68af6c99c5e21a33f2437ac2208a6","mcpName":"io.github.Anthony-Marcovecchio/prodlint","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"prodlint","email":"marcovecchioanthony@gmail.com"},"repository":{"url":"git+https://github.com/prodlint/prodlint.git","type":"git"},"_npmVersion":"10.9.0","description":"Production readiness for vibe-coded apps — know your AI code is ready to ship","directories":{},"_nodeVersion":"22.12.0","dependencies":{"zod":"^4.3.6","fast-glob":"^3.3.3","picocolors":"^1.1.1","@babel/types":"^7.29.0","@babel/parser":"^7.29.0","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.2.3"},"_npmOperationalInternal":{"tmp":"tmp/prodlint_0.9.0_1771794080428_0.7078007126637489","host":"s3://npm-registry-packages-npm-production"}},"0.9.1":{"name":"prodlint","version":"0.9.1","keywords":["lint","linter","security","ai","ai-code","vibe-coding","production-readiness","code-quality","code-scanner","next.js","react","typescript","static-analysis","cli","scanner","mcp","mcp-server","cursor","copilot","v0","bolt","windsurf","claude","github-action","eslint-alternative","devtools"],"author":{"name":"prodlint contributors"},"license":"MIT","_id":"prodlint@0.9.1","maintainers":[{"name":"prodlint","email":"marcovecchioanthony@gmail.com"}],"homepage":"https://prodlint.com","bugs":{"url":"https://github.com/prodlint/prodlint/issues"},"bin":{"prodlint":"dist/cli.js","prodlint-mcp":"dist/mcp.js"},"dist":{"shasum":"f91eb6144060a6d54f8d093d21a12f884188255e","tarball":"https://registry.npmjs.org/prodlint/-/prodlint-0.9.1.tgz","fileCount":8,"integrity":"sha512-ZBYAfYMrzj6wPsiYgvoabZ2FHUNFuKxgqz1JfDPZV+ES/xx0T5UkZcqiao5m2WAT5nFrhTptlM1lpfQyWCNgqg==","signatures":[{"sig":"MEUCIQDz3A4GxS/peHpPIwlPwbaF5hjOERofeMIv2y65QQXh7gIgDO3PWB1TSTommw7qW+rSJ0cBPKxW/lo0A+7S8uMdOQM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":578647},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"import":"./dist/mcp.js"}},"gitHead":"a8af0786c1ff2ef6875f0867d06a323f5ecf9424","mcpName":"io.github.Anthony-Marcovecchio/prodlint","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"prodlint","email":"marcovecchioanthony@gmail.com"},"repository":{"url":"git+https://github.com/prodlint/prodlint.git","type":"git"},"_npmVersion":"10.9.0","description":"Production readiness for vibe-coded apps — know your AI code is ready to ship","directories":{},"_nodeVersion":"22.12.0","dependencies":{"zod":"^4.3.6","fast-glob":"^3.3.3","picocolors":"^1.1.1","@babel/types":"^7.29.0","@babel/parser":"^7.29.0","@modelcontextprotocol/sdk":"^1.26.0","@rollup/rollup-win32-x64-msvc":"^4.59.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.2.3"},"_npmOperationalInternal":{"tmp":"tmp/prodlint_0.9.1_1772064125742_0.7778883970906361","host":"s3://npm-registry-packages-npm-production"}},"0.9.2":{"name":"prodlint","version":"0.9.2","keywords":["lint","linter","security","ai","ai-code","vibe-coding","production-readiness","code-quality","code-scanner","next.js","react","typescript","static-analysis","cli","scanner","mcp","mcp-server","cursor","copilot","v0","bolt","windsurf","claude","github-action","eslint-alternative","devtools"],"author":{"name":"prodlint contributors"},"license":"MIT","_id":"prodlint@0.9.2","maintainers":[{"name":"prodlint","email":"marcovecchioanthony@gmail.com"}],"homepage":"https://prodlint.com","bugs":{"url":"https://github.com/prodlint/prodlint/issues"},"bin":{"prodlint":"dist/cli.js","prodlint-mcp":"dist/mcp.js"},"dist":{"shasum":"13192babdd92c74e9a181cf79def8dd01a048381","tarball":"https://registry.npmjs.org/prodlint/-/prodlint-0.9.2.tgz","fileCount":8,"integrity":"sha512-cu34LabMaF+cf5LFJgs3cHjrqOgtv/ogkg8+vKhl25cgrP79ohF2X/Qs3YSlRO7ssVoCA7yQYi7vbYKrMfyUfA==","signatures":[{"sig":"MEUCICKGorl1D8wjLMynzWOKE+N57trK3C5X8HMh4LcakgEVAiEA4I2nLm9UCUSeV/DXlHL8YIT5IIzsljW0b0NvospXEuA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":585740},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"import":"./dist/mcp.js"}},"gitHead":"7d11a49aca403a98988fbdb520936f61d787cba6","mcpName":"io.github.Anthony-Marcovecchio/prodlint","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"prodlint","email":"marcovecchioanthony@gmail.com"},"repository":{"url":"git+https://github.com/prodlint/prodlint.git","type":"git"},"_npmVersion":"10.9.0","description":"Production readiness for vibe-coded apps — know your AI code is ready to ship","directories":{},"_nodeVersion":"22.12.0","dependencies":{"zod":"^4.3.6","fast-glob":"^3.3.3","picocolors":"^1.1.1","@babel/types":"^7.29.0","@babel/parser":"^7.29.0","@modelcontextprotocol/sdk":"^1.26.0","@rollup/rollup-win32-x64-msvc":"^4.59.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.2.3"},"_npmOperationalInternal":{"tmp":"tmp/prodlint_0.9.2_1772208429021_0.6026539064987126","host":"s3://npm-registry-packages-npm-production"}},"0.9.3":{"name":"prodlint","version":"0.9.3","keywords":["lint","linter","security","ai","ai-code","vibe-coding","production-readiness","code-quality","code-scanner","next.js","react","typescript","static-analysis","cli","scanner","mcp","mcp-server","cursor","copilot","v0","bolt","windsurf","claude","github-action","eslint-alternative","devtools"],"author":{"name":"prodlint contributors"},"license":"MIT","_id":"prodlint@0.9.3","maintainers":[{"name":"prodlint","email":"marcovecchioanthony@gmail.com"}],"homepage":"https://prodlint.com","bugs":{"url":"https://github.com/prodlint/prodlint/issues"},"bin":{"prodlint":"dist/cli.js","prodlint-mcp":"dist/mcp.js"},"dist":{"shasum":"10a56ca13e5d26bfa1c0d45db85ab892eeae90ab","tarball":"https://registry.npmjs.org/prodlint/-/prodlint-0.9.3.tgz","fileCount":8,"integrity":"sha512-WsEr1r10HoBMnA/VEE+F0mNyViMsPjhrPyfObvXwc7UxLxZxfgnbEKH2F6+twzMuE5NbBqypbyr1J3lcFW0JpQ==","signatures":[{"sig":"MEUCIDN2m+eai5UPQqhhcFC0XjXXDsnw231ZpvL+uIM6jfsuAiEAt/z2nTAasq0n1Btw8EjAsllemOqq9frlmcPUlJuGG5g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":585856},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"import":"./dist/mcp.js"}},"gitHead":"1ed3db42367bc80a3dee0a08f9e074bb310523b1","mcpName":"io.github.Anthony-Marcovecchio/prodlint","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build","audit:supply-chain":"node scripts/supply-chain-audit.cjs"},"_npmUser":{"name":"prodlint","email":"marcovecchioanthony@gmail.com"},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/prodlint/prodlint.git","type":"git"},"_npmVersion":"10.9.0","description":"Production readiness for vibe-coded apps — know your AI code is ready to ship","directories":{},"_nodeVersion":"22.12.0","dependencies":{"zod":"^4.4.3","fast-glob":"^3.3.3","picocolors":"^1.1.1","@babel/types":"^7.29.7","@babel/parser":"^7.29.7","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^3.2.6","typescript":"^5.9.3","@types/node":"^26.0.1","@rollup/rollup-win32-x64-msvc":"^4.62.2"},"_npmOperationalInternal":{"tmp":"tmp/prodlint_0.9.3_1782751882279_0.05472088075523507","host":"s3://npm-registry-packages-npm-production"}},"0.9.4":{"name":"prodlint","version":"0.9.4","keywords":["lint","linter","security","ai","ai-code","vibe-coding","production-readiness","code-quality","code-scanner","next.js","react","typescript","static-analysis","cli","scanner","mcp","mcp-server","cursor","copilot","v0","bolt","windsurf","claude","github-action","eslint-alternative","devtools"],"author":{"name":"prodlint contributors"},"license":"MIT","_id":"prodlint@0.9.4","maintainers":[{"name":"prodlint","email":"marcovecchioanthony@gmail.com"}],"homepage":"https://prodlint.com","bugs":{"url":"https://github.com/prodlint/prodlint/issues"},"bin":{"prodlint":"dist/cli.js","prodlint-mcp":"dist/mcp.js"},"dist":{"shasum":"f5153c6d8169bda175070948d6b8373ea90ed99b","tarball":"https://registry.npmjs.org/prodlint/-/prodlint-0.9.4.tgz","fileCount":8,"integrity":"sha512-3TBe4wg1TtydP16EJLg6/yhfCcOODuezh0r+ZHaWCZh8Bv1sNpCkMcgUSlwemnYEzG0280SqKh5hhuUK1NUDjg==","signatures":[{"sig":"MEUCIQCmnfjcoBSME6qFgSzL4mAzxhqGRN8JTa51aFFN5DZ5jgIgC+1J1ItJUro1AdO2L0u6EBjTh+qOhCBnWWTUMjfdPS4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":589151},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"import":"./dist/mcp.js"}},"gitHead":"b3e6d0b0b84c81376740dcf996db0169e7d7a3e9","mcpName":"io.github.Anthony-Marcovecchio/prodlint","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build","audit:supply-chain":"node scripts/supply-chain-audit.cjs"},"_npmUser":{"name":"prodlint","email":"marcovecchioanthony@gmail.com"},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/prodlint/prodlint.git","type":"git"},"_npmVersion":"10.9.0","description":"Production readiness for vibe-coded apps — know your AI code is ready to ship","directories":{},"_nodeVersion":"22.12.0","dependencies":{"zod":"^4.4.3","fast-glob":"^3.3.3","picocolors":"^1.1.1","@babel/types":"^7.29.7","@babel/parser":"^7.29.7","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^3.2.6","typescript":"^5.9.3","@types/node":"^26.0.1"},"optionalDependencies":{"@rollup/rollup-win32-x64-msvc":"^4.62.2"},"_npmOperationalInternal":{"tmp":"tmp/prodlint_0.9.4_1782759422235_0.5108930195136636","host":"s3://npm-registry-packages-npm-production"}},"0.9.5":{"name":"prodlint","version":"0.9.5","keywords":["lint","linter","security","ai","ai-code","vibe-coding","production-readiness","code-quality","code-scanner","next.js","react","typescript","static-analysis","cli","scanner","mcp","mcp-server","cursor","copilot","v0","bolt","windsurf","claude","github-action","eslint-alternative","devtools"],"author":{"name":"prodlint contributors"},"license":"MIT","_id":"prodlint@0.9.5","maintainers":[{"name":"prodlint","email":"marcovecchioanthony@gmail.com"}],"homepage":"https://prodlint.com","bugs":{"url":"https://github.com/prodlint/prodlint/issues"},"bin":{"prodlint":"dist/cli.js","prodlint-mcp":"dist/mcp.js"},"dist":{"shasum":"69c6e0dd764769621cc79accd081c645f1d7a6d2","tarball":"https://registry.npmjs.org/prodlint/-/prodlint-0.9.5.tgz","fileCount":8,"integrity":"sha512-Oq2FZoA664wpiR1GVI18wg01RCwJMTANtcE3Kty//Vn8eUk38KGC4dCeF/QEpZxdNvLUU7mYsCKqQZLWS6Ue2Q==","signatures":[{"sig":"MEUCIQDwrhCyNnSw0Q2s0Ia1OtKRwJVp1jfkcuO/bSP7aPiT4gIgKHBvrK+SiuBdhzSEMx0lpEWnORA88Uw6vgqzH+sN4sE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":589139},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"import":"./dist/mcp.js"}},"gitHead":"ffdb65a4ce4b4b207f9dab6a1843906b933c46f4","mcpName":"io.github.prodlint/prodlint","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build","audit:supply-chain":"node scripts/supply-chain-audit.cjs"},"_npmUser":{"name":"prodlint","email":"marcovecchioanthony@gmail.com"},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/prodlint/prodlint.git","type":"git"},"_npmVersion":"10.9.0","description":"Production readiness for vibe-coded apps — know your AI code is ready to ship","directories":{},"_nodeVersion":"22.12.0","dependencies":{"zod":"^4.4.3","fast-glob":"^3.3.3","picocolors":"^1.1.1","@babel/types":"^7.29.7","@babel/parser":"^7.29.7","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^3.2.6","typescript":"^5.9.3","@types/node":"^26.0.1"},"optionalDependencies":{"@rollup/rollup-win32-x64-msvc":"^4.62.2"},"_npmOperationalInternal":{"tmp":"tmp/prodlint_0.9.5_1782761319944_0.48663790637271664","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"prodlint","version":"0.10.0","description":"Production readiness for vibe-coded apps — know your AI code is ready to ship","license":"MIT","author":{"name":"prodlint contributors"},"type":"module","repository":{"type":"git","url":"git+https://github.com/prodlint/prodlint.git"},"bugs":{"url":"https://github.com/prodlint/prodlint/issues"},"homepage":"https://prodlint.com","mcpName":"io.github.prodlint/prodlint","bin":{"prodlint":"dist/cli.js","prodlint-mcp":"dist/mcp.js"},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"},"./mcp":{"import":"./dist/mcp.js"}},"scripts":{"build":"tsup","dev":"tsup --watch","test":"vitest run","test:watch":"vitest","lint":"node dist/cli.js .","audit:supply-chain":"node scripts/supply-chain-audit.cjs","verify:release":"node scripts/verify-release.cjs","sync:versions":"node scripts/sync-versions.cjs","version":"node scripts/sync-versions.cjs","prepublishOnly":"npm run build"},"dependencies":{"@babel/parser":"^7.29.7","@babel/types":"^7.29.7","@modelcontextprotocol/sdk":"^1.30.0","fast-glob":"^3.3.3","picocolors":"^1.1.1","zod":"^4.4.3"},"devDependencies":{"@types/node":"^26.1.2","tsup":"^8.4.0","typescript":"^5.9.3","vitest":"^3.2.7"},"overrides":{"esbuild":"^0.28.1"},"engines":{"node":">=18"},"keywords":["lint","linter","security","ai","ai-code","vibe-coding","production-readiness","code-quality","code-scanner","next.js","react","typescript","static-analysis","cli","scanner","mcp","mcp-server","cursor","copilot","v0","bolt","windsurf","claude","github-action","eslint-alternative","devtools"],"gitHead":"7b36e1eb2c45ed01b2b21558cccf6e04375ab73b","_id":"prodlint@0.10.0","_nodeVersion":"24.18.0","_npmVersion":"12.0.2","dist":{"integrity":"sha512-LyYrG0+w/T7HRosNu2tAJuCvf4uSz7IwCSJYDd/kgiqt4kBtndAjWeIt5Va7W7NvXQpuSz+XyfzL2cKU+ggNWQ==","shasum":"e5494ddac5e8409b1236d5b6d79d1b6240c2a77d","tarball":"https://registry.npmjs.org/prodlint/-/prodlint-0.10.0.tgz","fileCount":8,"unpackedSize":591537,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/prodlint@0.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIHxbxQ2l1WSdvf50Ri2d0wKULXCkDCjhlT1zRBpxuH2FAiBK1hfeRKRbJvnkihePfJEtaGE+wMDeRM3HDZqn4Z2k5A=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0f9d9a49-8cb1-4d8d-8d12-23009b0d1948"}},"directories":{},"maintainers":[{"name":"prodlint","email":"marcovecchioanthony@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/prodlint_0.10.0_1786249018201_0.7303190607472059"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-16T01:58:52.033Z","modified":"2026-08-09T04:16:58.646Z","0.1.0":"2026-02-16T01:58:52.183Z","0.2.0":"2026-02-16T02:24:42.439Z","0.2.1":"2026-02-16T07:43:23.361Z","0.2.2":"2026-02-16T08:43:30.155Z","0.3.0":"2026-02-18T05:23:40.885Z","0.3.1":"2026-02-18T06:04:10.594Z","0.5.0":"2026-02-19T05:07:04.299Z","0.6.0":"2026-02-19T06:26:33.285Z","0.7.0":"2026-02-19T14:09:23.225Z","0.7.1":"2026-02-20T01:25:35.137Z","0.7.2":"2026-02-21T06:47:19.795Z","0.8.0":"2026-02-22T04:46:00.677Z","0.8.1":"2026-02-22T05:10:12.482Z","0.9.0":"2026-02-22T21:01:20.597Z","0.9.1":"2026-02-26T00:02:05.899Z","0.9.2":"2026-02-27T16:07:09.166Z","0.9.3":"2026-06-29T16:51:22.470Z","0.9.4":"2026-06-29T18:57:02.417Z","0.9.5":"2026-06-29T19:28:40.098Z","0.10.0":"2026-08-09T04:16:58.340Z"},"bugs":{"url":"https://github.com/prodlint/prodlint/issues"},"author":{"name":"prodlint contributors"},"license":"MIT","homepage":"https://prodlint.com","keywords":["lint","linter","security","ai","ai-code","vibe-coding","production-readiness","code-quality","code-scanner","next.js","react","typescript","static-analysis","cli","scanner","mcp","mcp-server","cursor","copilot","v0","bolt","windsurf","claude","github-action","eslint-alternative","devtools"],"repository":{"type":"git","url":"git+https://github.com/prodlint/prodlint.git"},"description":"Production readiness for vibe-coded apps — know your AI code is ready to ship","maintainers":[{"name":"prodlint","email":"marcovecchioanthony@gmail.com"}],"readme":"# prodlint\n\n[![npm version](https://img.shields.io/npm/v/prodlint.svg)](https://www.npmjs.com/package/prodlint)\n[![npm downloads](https://img.shields.io/npm/dm/prodlint.svg)](https://www.npmjs.com/package/prodlint)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nProduction readiness for vibe-coded apps.\n\nStatic analysis for vibe-coded apps. Flags the security, reliability, performance, and AI quality issues that Cursor, v0, Bolt, and Copilot create — hallucinated imports, missing auth, hardcoded secrets, unvalidated server actions, and more. Zero config, no LLM, 52 rules.\n\n```bash\nnpx prodlint\n```\n\n```\n  prodlint v0.10.0\n  Scanned 148 files · 2 critical · 5 warnings · 1 info\n\n  src/app/api/checkout/route.ts\n    12:1  INFO  No rate limiting — anyone could spam this endpoint and run up your API costs  rate-limiting\n    28:5  WARN  Empty catch block silently swallows error  shallow-catch\n\n  src/actions/submit.ts\n    5:3   CRIT  Server action uses formData without validation  next-server-action-validation\n      ↳ Validate with Zod: const data = schema.safeParse(Object.fromEntries(formData))\n\n  src/lib/db.ts\n    1:1   CRIT  Package \"drizzle-orm\" is imported but not in package.json  hallucinated-imports\n\n  Scores\n  security        72 ████████████████░░░░  (8 issues)\n  reliability     85 █████████████████░░░  (4 issues)\n  performance     95 ███████████████████░  (1 issue)\n  ai-quality      90 ██████████████████░░  (3 issues)\n\n  Overall: 82/100 (weighted)\n\n  2 critical · 5 warnings · 4 info\n```\n\n## Why?\n\nVibe coding is the fastest way to build. Shipping fast means knowing your code is production-ready — not just that it compiles. Hardcoded secrets, hallucinated packages, missing auth, and XSS vectors pass type-checks and look correct — but they aren't ready for production.\n\nprodlint checks what TypeScript and ESLint don't: **whether your vibe-coded app is ready for production**.\n\n## Install\n\n```bash\nnpx prodlint                              # Run directly (no install)\nnpx prodlint ./my-app                     # Scan specific path\nnpx prodlint --json                       # JSON output for CI\nnpx prodlint --sarif                      # SARIF 2.1.0 for GitHub Code Scanning\nnpx prodlint --summary                    # Quick pass/fail + top 3 blockers\nnpx prodlint --profile startup            # Only critical findings\nnpx prodlint --profile strict             # All findings including info\nnpx prodlint --baseline .prodlint-baseline.json   # Only new findings\nnpx prodlint --ignore \"*.test.ts\"         # Ignore patterns\nnpx prodlint --min-severity warning       # Only warnings and criticals\nnpx prodlint --quiet                      # Suppress badge output\n```\n\nOr install it:\n\n```bash\nnpm i -D prodlint     # Project dependency\nnpm i -g prodlint     # Global install\n```\n\n## 52 Rules across 4 Categories\n\n### Security (27 rules)\n\n| Rule | What it checks |\n|------|----------------|\n| `secrets` | API keys, tokens, passwords hardcoded in source |\n| `auth-checks` | API routes with no authentication |\n| `env-exposure` | `NEXT_PUBLIC_` on server-only secrets |\n| `input-validation` | Request body used without validation |\n| `cors-config` | `Access-Control-Allow-Origin: *`, wildcard + credentials escalated to critical |\n| `unsafe-html` | `dangerouslySetInnerHTML` with user data |\n| `sql-injection` | String-interpolated SQL queries (ORM-aware) |\n| `open-redirect` | User input passed to `redirect()` |\n| `rate-limiting` | API routes with no rate limiter |\n| `phantom-dependency` | Packages in node_modules but missing from package.json |\n| `insecure-cookie` | Session cookies missing httpOnly/secure/sameSite |\n| `leaked-env-in-logs` | `process.env.*` inside console.log calls |\n| `insecure-random` | `Math.random()` used for tokens, secrets, or session IDs |\n| `next-server-action-validation` | Server actions using formData without Zod/schema validation |\n| `env-fallback-secret` | Security-sensitive env vars with hardcoded fallback values |\n| `verbose-error-response` | Error stack traces or messages leaked in API responses |\n| `missing-webhook-verification` | Webhook routes without signature verification |\n| `server-action-auth` | Server actions with mutations but no auth check |\n| `eval-injection` | `eval()`, `new Function()`, dynamic code execution |\n| `next-public-sensitive` | `NEXT_PUBLIC_` prefix on secret env vars |\n| `ssrf-risk` | User-controlled URLs passed to fetch in server code |\n| `path-traversal` | File system operations with unsanitized user input |\n| `unsafe-file-upload` | File upload handlers without type or size validation |\n| `supabase-missing-rls` | `CREATE TABLE` in migrations without enabling RLS |\n| `deprecated-oauth-flow` | OAuth Implicit Grant (response_type=token) |\n| `jwt-no-expiry` | JWT tokens signed without an expiration |\n| `client-side-auth-only` | Password comparisons or auth logic in client components |\n\n### Reliability (11 rules)\n\n| Rule | What it checks |\n|------|----------------|\n| `hallucinated-imports` | Imports of packages not in package.json |\n| `error-handling` | Async operations without try/catch |\n| `unhandled-promise` | Floating promises with no await or .catch |\n| `shallow-catch` | Empty catch blocks that swallow errors |\n| `missing-loading-state` | Client components that fetch without a loading state |\n| `missing-error-boundary` | Route layouts without a matching error.tsx |\n| `missing-transaction` | Multiple Prisma writes without `$transaction` |\n| `redirect-in-try-catch` | `redirect()` inside try/catch — Next.js redirect throws, catch swallows it |\n| `missing-revalidation` | Server actions with DB mutations but no `revalidatePath` |\n| `missing-useeffect-cleanup` | useEffect with subscriptions/timers but no cleanup return |\n| `hydration-mismatch` | `window`/`Date.now()`/`Math.random()` in server component render path |\n\n### Performance (6 rules)\n\n| Rule | What it checks |\n|------|----------------|\n| `no-sync-fs` | `readFileSync` in API routes |\n| `no-n-plus-one` | Database calls inside loops |\n| `no-unbounded-query` | `.findMany()` / `.select('*')` with no limit |\n| `no-dynamic-import-loop` | `import()` inside loops |\n| `server-component-fetch-self` | Server components fetching their own API routes |\n| `missing-abort-controller` | Fetch/axios calls without timeout or AbortController |\n\n### AI Quality (8 rules)\n\n| Rule | What it checks |\n|------|----------------|\n| `ai-smells` | `any` types, `console.log`, TODO comments piling up |\n| `placeholder-content` | Lorem ipsum, example emails, \"your-api-key-here\" left in production code |\n| `hallucinated-api` | `.flatten()`, `.contains()`, `.substr()` — methods AI invents |\n| `stale-fallback` | `localhost:3000` hardcoded in production code |\n| `comprehension-debt` | Functions over 80 lines, deep nesting, too many parameters |\n| `codebase-consistency` | Mixed naming conventions across the project |\n| `dead-exports` | Exported functions that nothing imports |\n| `use-client-overuse` | `\"use client\"` on files that don't use any client-side APIs |\n\n## Smart Detection\n\nprodlint avoids common false positives:\n\n- **AST parsing** — Babel-based analysis for 12 rules (imports, catch blocks, redirects, SSRF, path traversal, JWT, HTML injection, hydration, transactions, env leaks, loops, SQL) with regex fallback\n- **Monorepo support** — npm/yarn/pnpm workspace dependencies resolved automatically\n- **Framework awareness** — Prisma, Drizzle, Supabase, Knex, and Sequelize whitelists prevent false SQL injection flags\n- **Middleware detection** — Clerk, NextAuth, Supabase middleware detected — auth findings downgraded\n- **Block comment awareness** — patterns inside `/* */` are ignored\n- **Path alias support** — `@/`, `~/`, and tsconfig paths aren't flagged as hallucinated imports\n- **Route exemptions** — auth, webhook, health, and cron routes are exempt from auth/rate-limit checks\n- **Test/script file awareness** — lower severity for non-production files\n- **Fix suggestions** — findings include actionable `fix` hints with remediation code\n\n## Scoring\n\nEach category starts at 100. Deductions per finding:\n\n| Severity | Deduction | Per-rule cap |\n|----------|-----------|--------------|\n| critical | -8 | max 1 |\n| warning | -2 | max 2 |\n| info | -0.5 | max 3 |\n\n**Diminishing returns**: after 30 points deducted in a category, further deductions are halved; after 50, quartered.\n\n**Weighted overall**: security 40%, reliability 30%, performance 15%, ai-quality 15%. Floor at 0. Exit code `1` if any critical findings exist.\n\n## GitHub Action\n\nAdd to `.github/workflows/prodlint.yml`:\n\n```yaml\nname: Prodlint\non: [pull_request]\n\njobs:\n  scan:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: prodlint/prodlint@v1\n        with:\n          threshold: 50\n```\n\nPosts a score breakdown as a PR comment and fails the build if below threshold.\n\n| Input | Default | Description |\n|-------|---------|-------------|\n| `path` | `.` | Path to scan |\n| `threshold` | `0` | Minimum score to pass (0-100) |\n| `ignore` | | Comma-separated glob patterns to ignore |\n| `comment` | `true` | Post PR comment with results |\n\n| Output | Description |\n|--------|-------------|\n| `score` | Overall score (0-100) |\n| `critical` | Number of critical findings |\n\n### SARIF + GitHub Code Scanning\n\nUpload prodlint results to GitHub's Security tab:\n\n```yaml\n- name: Run prodlint\n  run: npx prodlint --sarif > prodlint.sarif\n\n- name: Upload SARIF\n  uses: github/codeql-action/upload-sarif@v4\n  with:\n    sarif_file: prodlint.sarif\n    category: prodlint\n```\n\n### Baseline for Existing Projects\n\nAdopt prodlint gradually without drowning in pre-existing findings:\n\n```bash\n# Save current state as baseline\nnpx prodlint --baseline-save .prodlint-baseline.json\n\n# CI only fails on NEW findings\nnpx prodlint --baseline .prodlint-baseline.json\n```\n\n## MCP Server\n\nUse prodlint inside Cursor, Claude Code, or any MCP-compatible editor:\n\n**Claude Code:**\n```bash\nclaude mcp add prodlint -- npx -y -p prodlint prodlint-mcp\n```\n\n**Cursor / Windsurf:**\n```json\n{\n  \"mcpServers\": {\n    \"prodlint\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"-p\", \"prodlint\", \"prodlint-mcp\"]\n    }\n  }\n}\n```\n\n`-p prodlint` runs the MCP server straight from the `prodlint` package, so you always get\nthe current scanner.\n\nAsk your AI: *\"Run prodlint on this project\"* and it calls the `scan` tool directly.\n\n## Site Score\n\nCheck any deployed website for AI agent-readiness — 14 checks covering emerging standards like llms.txt, TDMRep, AgentCard, AI-Disclosure, HTTP Signatures (RFC 9421), and more.\n\n```bash\nnpx prodlint --web example.com\nnpx prodlint --web example.com --json     # JSON output\n```\n\n```\n  prodlint site score\n  example.com · 14 checks\n\n  Score: 42 C  ████████░░░░░░░░░░░░\n\n  ✗ AI-Disclosure Header          0/10  No AI-Disclosure header found.\n  ✗ Content-Usage Directives      0/10  No Content-Usage directives found.\n  ✗ TDMRep                        0/10  No TDMRep found.\n  ✗ A2A AgentCard                  0/5  No agent-card.json found.\n  ✗ ai.txt                         0/5  No ai.txt found at site root.\n  ! llms.txt                       2/5  llms.txt found but missing key sections.\n  ✓ robots.txt                   10/10  robots.txt found with 15 rules.\n  ✓ Sitemap                      10/10  Valid sitemap with 42 URLs.\n  ✓ Structured Data              10/10  Found JSON-LD structured data.\n  ✓ OpenGraph                    10/10  Complete OpenGraph tags found.\n  ✓ Page Speed                    5/5   Loaded in 0.8s.\n  ✓ AI Bot Directives             5/5   AI-specific bot rules found.\n  ✓ WebMCP Tools                   0/5  No WebMCP tools detected.\n\n  7 passed · 5 failed · 1 warnings\n\n  Full results: https://prodlint.com/score?url=example.com\n```\n\nOr check your score interactively at [prodlint.com/score](https://prodlint.com/score).\n\n## For AI Tools\n\n- **LLM-friendly docs**: [prodlint.com/llms.txt](https://prodlint.com/llms.txt) — concise project summary for LLMs\n- **Full reference**: [prodlint.com/llms-full.txt](https://prodlint.com/llms-full.txt) — all 52 rules with details\n- **MCP setup guide**: [prodlint.com/mcp](https://prodlint.com/mcp) — detailed editor setup for Claude Code, Cursor, Windsurf\n\nprodlint is designed specifically for AI-generated code patterns. Every rule checks for production issues that AI coding tools consistently create — not style nits.\n\n## Suppression\n\nSuppress a single line:\n```ts\n// prodlint-disable-next-line secrets\nconst key = \"sk_test_example_for_docs\"\n```\n\nSuppress an entire file (place at top):\n```ts\n// prodlint-disable secrets\n```\n\n## Programmatic API\n\n```ts\nimport { scan } from 'prodlint'\n\nconst result = await scan({ path: './my-project' })\nconsole.log(result.overallScore) // 0-100\nconsole.log(result.findings)     // Finding[]\n```\n\n## Badge\n\n```md\n[![prodlint](https://img.shields.io/badge/prodlint-85%2F100-brightgreen)](https://prodlint.com)\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}