{"_id":"@democratize-quality/qualitylens-core","_rev":"9-eb57e7e0294559eebd0c3761783d0d3c","name":"@democratize-quality/qualitylens-core","dist-tags":{"latest":"0.2.8"},"versions":{"0.1.0":{"name":"@democratize-quality/qualitylens-core","version":"0.1.0","keywords":["testing","playwright","qa","coverage"],"author":{"name":"Raj Uppadhyay"},"license":"AGPL-3.0-only","_id":"@democratize-quality/qualitylens-core@0.1.0","maintainers":[{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"}],"dist":{"shasum":"1fa2fb45dd87047bf2eb6c2a8f78470426a687a4","tarball":"https://registry.npmjs.org/@democratize-quality/qualitylens-core/-/qualitylens-core-0.1.0.tgz","fileCount":85,"integrity":"sha512-dOT6mxR6CVctm1QUFNpsuiZX15FyAkWWrQzDoB87wBRgaY9TMcoyY4r3OlLWr0dRh/3wIgq+FkVtQm/Mq988qA==","signatures":[{"sig":"MEUCIBqD673M6yIQqmLxWwfSTZHjSUCyWQFw0frr2jAXPaZIAiEA5zIJGNOZmrqUVLLwvoQSBzshcFs59oZHgRjkWQ7Os2Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":416973},"main":"./dist/core/types.js","types":"./dist/core/types.d.ts","module":"./dist/core/types.mjs","engines":{"node":">=20.0.0"},"exports":{"./core/types":{"types":"./dist/core/types.d.ts","import":"./dist/core/types.mjs","require":"./dist/core/types.js"},"./utils/http":{"types":"./dist/utils/http.d.ts","import":"./dist/utils/http.mjs","require":"./dist/utils/http.js"},"./core/config":{"types":"./dist/core/config.d.ts","import":"./dist/core/config.mjs","require":"./dist/core/config.js"},"./core/engine":{"types":"./dist/core/engine.d.ts","import":"./dist/core/engine.mjs","require":"./dist/core/engine.js"},"./utils/logger":{"types":"./dist/utils/logger.d.ts","import":"./dist/utils/logger.mjs","require":"./dist/utils/logger.js"},"./core/detector":{"types":"./dist/core/detector.d.ts","import":"./dist/core/detector.mjs","require":"./dist/core/detector.js"},"./sources/base.source":{"types":"./dist/sources/base.source.d.ts","import":"./dist/sources/base.source.mjs","require":"./dist/sources/base.source.js"},"./sources/yaml.source":{"types":"./dist/sources/yaml.source.d.ts","import":"./dist/sources/yaml.source.mjs","require":"./dist/sources/yaml.source.js"},"./matchers/area.matcher":{"types":"./dist/matchers/area.matcher.d.ts","import":"./dist/matchers/area.matcher.mjs","require":"./dist/matchers/area.matcher.js"},"./sources/routes.source":{"types":"./dist/sources/routes.source.d.ts","import":"./dist/sources/routes.source.mjs","require":"./dist/sources/routes.source.js"},"./matchers/fuzzy.matcher":{"types":"./dist/matchers/fuzzy.matcher.d.ts","import":"./dist/matchers/fuzzy.matcher.mjs","require":"./dist/matchers/fuzzy.matcher.js"},"./reporters/base.reporter":{"types":"./dist/reporters/base.reporter.d.ts","import":"./dist/reporters/base.reporter.mjs","require":"./dist/reporters/base.reporter.js"},"./sources/playwright.source":{"types":"./dist/sources/playwright.source.d.ts","import":"./dist/sources/playwright.source.mjs","require":"./dist/sources/playwright.source.js"},"./reporters/console.reporter":{"types":"./dist/reporters/console.reporter.d.ts","import":"./dist/reporters/console.reporter.mjs","require":"./dist/reporters/console.reporter.js"}},"gitHead":"9d064bb2d498b5daac55e43f56e4364a7485f54a","scripts":{"dev":"tsup --watch","lint":"tsc --noEmit","build":"tsup"},"_npmUser":{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"},"_npmVersion":"10.8.2","description":"Core library for qualitylens — engine, types, sources, matchers, reporters","directories":{},"_nodeVersion":"20.20.1","dependencies":{"chalk":"^5.3.0","js-yaml":"^4.1.0","fast-glob":"^3.3.2","@typescript-eslint/parser":"^8.57.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/qualitylens-core_0.1.0_1774779337617_0.6967024000257112","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@democratize-quality/qualitylens-core","version":"0.2.0","keywords":["testing","playwright","qa","coverage"],"author":{"name":"Raj Uppadhyay"},"license":"AGPL-3.0-only","_id":"@democratize-quality/qualitylens-core@0.2.0","maintainers":[{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"}],"dist":{"shasum":"f74e83ac63e6d88c4c40f9ab757498d540a98cf5","tarball":"https://registry.npmjs.org/@democratize-quality/qualitylens-core/-/qualitylens-core-0.2.0.tgz","fileCount":86,"integrity":"sha512-ltD32lHPk/GUywgmHsvGCu7LGhX0/MgigD+A4HX/8eYUCltW3HL5U7yybUEb3QEjmlQKg1rEI1Wcr8Q7yzcEyQ==","signatures":[{"sig":"MEYCIQC5O0oU/tSNP6p931sTOvkvPlB1JV8aq3MwMl74uVjGDAIhAKcy6Oy5AIVHNRXlcLcPPL/JjDphGQ4Hx8KZkxQfZHoa","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":422522},"main":"./dist/core/types.js","types":"./dist/core/types.d.ts","module":"./dist/core/types.mjs","engines":{"node":">=20.0.0"},"exports":{"./core/types":{"types":"./dist/core/types.d.ts","import":"./dist/core/types.mjs","require":"./dist/core/types.js"},"./utils/http":{"types":"./dist/utils/http.d.ts","import":"./dist/utils/http.mjs","require":"./dist/utils/http.js"},"./core/config":{"types":"./dist/core/config.d.ts","import":"./dist/core/config.mjs","require":"./dist/core/config.js"},"./core/engine":{"types":"./dist/core/engine.d.ts","import":"./dist/core/engine.mjs","require":"./dist/core/engine.js"},"./utils/logger":{"types":"./dist/utils/logger.d.ts","import":"./dist/utils/logger.mjs","require":"./dist/utils/logger.js"},"./core/detector":{"types":"./dist/core/detector.d.ts","import":"./dist/core/detector.mjs","require":"./dist/core/detector.js"},"./sources/base.source":{"types":"./dist/sources/base.source.d.ts","import":"./dist/sources/base.source.mjs","require":"./dist/sources/base.source.js"},"./sources/yaml.source":{"types":"./dist/sources/yaml.source.d.ts","import":"./dist/sources/yaml.source.mjs","require":"./dist/sources/yaml.source.js"},"./matchers/area.matcher":{"types":"./dist/matchers/area.matcher.d.ts","import":"./dist/matchers/area.matcher.mjs","require":"./dist/matchers/area.matcher.js"},"./sources/routes.source":{"types":"./dist/sources/routes.source.d.ts","import":"./dist/sources/routes.source.mjs","require":"./dist/sources/routes.source.js"},"./matchers/fuzzy.matcher":{"types":"./dist/matchers/fuzzy.matcher.d.ts","import":"./dist/matchers/fuzzy.matcher.mjs","require":"./dist/matchers/fuzzy.matcher.js"},"./reporters/base.reporter":{"types":"./dist/reporters/base.reporter.d.ts","import":"./dist/reporters/base.reporter.mjs","require":"./dist/reporters/base.reporter.js"},"./sources/playwright.source":{"types":"./dist/sources/playwright.source.d.ts","import":"./dist/sources/playwright.source.mjs","require":"./dist/sources/playwright.source.js"},"./reporters/console.reporter":{"types":"./dist/reporters/console.reporter.d.ts","import":"./dist/reporters/console.reporter.mjs","require":"./dist/reporters/console.reporter.js"}},"gitHead":"6720929d96f6d6089cad3a1b62e3f54f3cd8876d","scripts":{"dev":"tsup --watch","lint":"tsc --noEmit","build":"tsup"},"_npmUser":{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"},"_npmVersion":"10.8.2","description":"Core library for qualitylens — engine, types, sources, matchers, reporters","directories":{},"_nodeVersion":"20.20.1","dependencies":{"chalk":"^5.3.0","js-yaml":"^4.1.0","fast-glob":"^3.3.2","@typescript-eslint/parser":"^8.57.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/qualitylens-core_0.2.0_1774781057881_0.4137983741703346","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@democratize-quality/qualitylens-core","version":"0.2.1","keywords":["testing","playwright","qa","coverage"],"author":{"name":"Raj Uppadhyay"},"license":"AGPL-3.0-only","_id":"@democratize-quality/qualitylens-core@0.2.1","maintainers":[{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"}],"dist":{"shasum":"a4bf91931d44ab5ee2edd080c7f3adf80cca4f08","tarball":"https://registry.npmjs.org/@democratize-quality/qualitylens-core/-/qualitylens-core-0.2.1.tgz","fileCount":86,"integrity":"sha512-txrHmRpz9ojseYnxOEEmX9FlZQSFiupKQBsuMSFfB7aKVPfEwGO6jVJd6DRKruLGtxGKJrUzVXFJyN3I2QSqQQ==","signatures":[{"sig":"MEQCICnFkfdMe0HwcfGgFcJaXC2auW1y2lOklJwJkmzSQxkaAiBUDxdeA7WXw9qtsy6AyOaCCjKirvbclKtooBs1w4RcdA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":422522},"main":"./dist/core/types.js","types":"./dist/core/types.d.ts","module":"./dist/core/types.mjs","engines":{"node":">=20.0.0"},"exports":{"./core/types":{"types":"./dist/core/types.d.ts","import":"./dist/core/types.mjs","require":"./dist/core/types.js"},"./utils/http":{"types":"./dist/utils/http.d.ts","import":"./dist/utils/http.mjs","require":"./dist/utils/http.js"},"./core/config":{"types":"./dist/core/config.d.ts","import":"./dist/core/config.mjs","require":"./dist/core/config.js"},"./core/engine":{"types":"./dist/core/engine.d.ts","import":"./dist/core/engine.mjs","require":"./dist/core/engine.js"},"./utils/logger":{"types":"./dist/utils/logger.d.ts","import":"./dist/utils/logger.mjs","require":"./dist/utils/logger.js"},"./core/detector":{"types":"./dist/core/detector.d.ts","import":"./dist/core/detector.mjs","require":"./dist/core/detector.js"},"./sources/base.source":{"types":"./dist/sources/base.source.d.ts","import":"./dist/sources/base.source.mjs","require":"./dist/sources/base.source.js"},"./sources/yaml.source":{"types":"./dist/sources/yaml.source.d.ts","import":"./dist/sources/yaml.source.mjs","require":"./dist/sources/yaml.source.js"},"./matchers/area.matcher":{"types":"./dist/matchers/area.matcher.d.ts","import":"./dist/matchers/area.matcher.mjs","require":"./dist/matchers/area.matcher.js"},"./sources/routes.source":{"types":"./dist/sources/routes.source.d.ts","import":"./dist/sources/routes.source.mjs","require":"./dist/sources/routes.source.js"},"./matchers/fuzzy.matcher":{"types":"./dist/matchers/fuzzy.matcher.d.ts","import":"./dist/matchers/fuzzy.matcher.mjs","require":"./dist/matchers/fuzzy.matcher.js"},"./reporters/base.reporter":{"types":"./dist/reporters/base.reporter.d.ts","import":"./dist/reporters/base.reporter.mjs","require":"./dist/reporters/base.reporter.js"},"./sources/playwright.source":{"types":"./dist/sources/playwright.source.d.ts","import":"./dist/sources/playwright.source.mjs","require":"./dist/sources/playwright.source.js"},"./reporters/console.reporter":{"types":"./dist/reporters/console.reporter.d.ts","import":"./dist/reporters/console.reporter.mjs","require":"./dist/reporters/console.reporter.js"}},"gitHead":"dbfa6971513872aa301c27da6d7eb60dc79bc2eb","scripts":{"dev":"tsup --watch","lint":"tsc --noEmit","build":"tsup"},"_npmUser":{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"},"_npmVersion":"10.8.2","description":"Core library for qualitylens — engine, types, sources, matchers, reporters","directories":{},"_nodeVersion":"20.20.1","dependencies":{"chalk":"^5.3.0","js-yaml":"^4.1.0","fast-glob":"^3.3.2","@typescript-eslint/parser":"^8.57.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/qualitylens-core_0.2.1_1774781987269_0.019698224615852578","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@democratize-quality/qualitylens-core","version":"0.2.2","keywords":["testing","playwright","qa","coverage"],"author":{"name":"Raj Uppadhyay"},"license":"AGPL-3.0-only","_id":"@democratize-quality/qualitylens-core@0.2.2","maintainers":[{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"}],"dist":{"shasum":"c68f6dd9bb22c44f26cd5945dce4c1c68d7c6bf3","tarball":"https://registry.npmjs.org/@democratize-quality/qualitylens-core/-/qualitylens-core-0.2.2.tgz","fileCount":86,"integrity":"sha512-krOYh7o9Ze/zMq+YlZfbLTDIDvE1CJR+xd6KKAGgFFn0rCKfdcXAQvnF0lGDHwDuGOUcFV/3tzzPXSTej/MyPA==","signatures":[{"sig":"MEUCIQC6hwnNeuK1OqaSL7qQY8MZYA1DNkIznZyc3TcAEp4LmwIgUJyk6+TferwrSBOs6iuHc8ep6R1zXk6I0b8PrneufSE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":422522},"main":"./dist/core/types.js","types":"./dist/core/types.d.ts","module":"./dist/core/types.mjs","engines":{"node":">=20.0.0"},"exports":{"./core/types":{"types":"./dist/core/types.d.ts","import":"./dist/core/types.mjs","require":"./dist/core/types.js"},"./utils/http":{"types":"./dist/utils/http.d.ts","import":"./dist/utils/http.mjs","require":"./dist/utils/http.js"},"./core/config":{"types":"./dist/core/config.d.ts","import":"./dist/core/config.mjs","require":"./dist/core/config.js"},"./core/engine":{"types":"./dist/core/engine.d.ts","import":"./dist/core/engine.mjs","require":"./dist/core/engine.js"},"./utils/logger":{"types":"./dist/utils/logger.d.ts","import":"./dist/utils/logger.mjs","require":"./dist/utils/logger.js"},"./core/detector":{"types":"./dist/core/detector.d.ts","import":"./dist/core/detector.mjs","require":"./dist/core/detector.js"},"./sources/base.source":{"types":"./dist/sources/base.source.d.ts","import":"./dist/sources/base.source.mjs","require":"./dist/sources/base.source.js"},"./sources/yaml.source":{"types":"./dist/sources/yaml.source.d.ts","import":"./dist/sources/yaml.source.mjs","require":"./dist/sources/yaml.source.js"},"./matchers/area.matcher":{"types":"./dist/matchers/area.matcher.d.ts","import":"./dist/matchers/area.matcher.mjs","require":"./dist/matchers/area.matcher.js"},"./sources/routes.source":{"types":"./dist/sources/routes.source.d.ts","import":"./dist/sources/routes.source.mjs","require":"./dist/sources/routes.source.js"},"./matchers/fuzzy.matcher":{"types":"./dist/matchers/fuzzy.matcher.d.ts","import":"./dist/matchers/fuzzy.matcher.mjs","require":"./dist/matchers/fuzzy.matcher.js"},"./reporters/base.reporter":{"types":"./dist/reporters/base.reporter.d.ts","import":"./dist/reporters/base.reporter.mjs","require":"./dist/reporters/base.reporter.js"},"./sources/playwright.source":{"types":"./dist/sources/playwright.source.d.ts","import":"./dist/sources/playwright.source.mjs","require":"./dist/sources/playwright.source.js"},"./reporters/console.reporter":{"types":"./dist/reporters/console.reporter.d.ts","import":"./dist/reporters/console.reporter.mjs","require":"./dist/reporters/console.reporter.js"}},"gitHead":"ae950d31d641129648985fb29e0dd28fa328acea","scripts":{"dev":"tsup --watch","lint":"tsc --noEmit","build":"tsup"},"_npmUser":{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"},"_npmVersion":"10.8.2","description":"Core library for qualitylens — engine, types, sources, matchers, reporters","directories":{},"_nodeVersion":"20.20.1","dependencies":{"chalk":"^5.3.0","js-yaml":"^4.1.0","fast-glob":"^3.3.2","@typescript-eslint/parser":"^8.57.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/qualitylens-core_0.2.2_1774782336859_0.9038707409615729","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@democratize-quality/qualitylens-core","version":"0.2.4","keywords":["testing","playwright","qa","coverage"],"author":{"name":"Raj Uppadhyay"},"license":"AGPL-3.0-only","_id":"@democratize-quality/qualitylens-core@0.2.4","maintainers":[{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"}],"dist":{"shasum":"5626c30f2a87fb40582bc0b9e7f09b470602c2f1","tarball":"https://registry.npmjs.org/@democratize-quality/qualitylens-core/-/qualitylens-core-0.2.4.tgz","fileCount":86,"integrity":"sha512-PmIJEVziR0gnYpUwkchMdtgQTyZCG9uG+MKO6wxTcgk/Mw8aJVwxrDGfG6dgiEtH5oXWOxuhVz687zUiVUhYzQ==","signatures":[{"sig":"MEUCICSXNg6f9KGNTFnxjWRke8POIHBjD3z9GGQR4vfuJFKUAiEApF9CFQh6OJ1B3zOwFiiqkDcIbTM7GGUnfAzQEpFvjnY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":59269204},"main":"./dist/core/types.js","types":"./dist/core/types.d.ts","module":"./dist/core/types.mjs","engines":{"node":">=20.0.0"},"exports":{"./core/types":{"types":"./dist/core/types.d.ts","import":"./dist/core/types.mjs","require":"./dist/core/types.js"},"./utils/http":{"types":"./dist/utils/http.d.ts","import":"./dist/utils/http.mjs","require":"./dist/utils/http.js"},"./core/config":{"types":"./dist/core/config.d.ts","import":"./dist/core/config.mjs","require":"./dist/core/config.js"},"./core/engine":{"types":"./dist/core/engine.d.ts","import":"./dist/core/engine.mjs","require":"./dist/core/engine.js"},"./utils/logger":{"types":"./dist/utils/logger.d.ts","import":"./dist/utils/logger.mjs","require":"./dist/utils/logger.js"},"./core/detector":{"types":"./dist/core/detector.d.ts","import":"./dist/core/detector.mjs","require":"./dist/core/detector.js"},"./sources/base.source":{"types":"./dist/sources/base.source.d.ts","import":"./dist/sources/base.source.mjs","require":"./dist/sources/base.source.js"},"./sources/yaml.source":{"types":"./dist/sources/yaml.source.d.ts","import":"./dist/sources/yaml.source.mjs","require":"./dist/sources/yaml.source.js"},"./matchers/area.matcher":{"types":"./dist/matchers/area.matcher.d.ts","import":"./dist/matchers/area.matcher.mjs","require":"./dist/matchers/area.matcher.js"},"./sources/routes.source":{"types":"./dist/sources/routes.source.d.ts","import":"./dist/sources/routes.source.mjs","require":"./dist/sources/routes.source.js"},"./matchers/fuzzy.matcher":{"types":"./dist/matchers/fuzzy.matcher.d.ts","import":"./dist/matchers/fuzzy.matcher.mjs","require":"./dist/matchers/fuzzy.matcher.js"},"./reporters/base.reporter":{"types":"./dist/reporters/base.reporter.d.ts","import":"./dist/reporters/base.reporter.mjs","require":"./dist/reporters/base.reporter.js"},"./sources/playwright.source":{"types":"./dist/sources/playwright.source.d.ts","import":"./dist/sources/playwright.source.mjs","require":"./dist/sources/playwright.source.js"},"./reporters/console.reporter":{"types":"./dist/reporters/console.reporter.d.ts","import":"./dist/reporters/console.reporter.mjs","require":"./dist/reporters/console.reporter.js"}},"gitHead":"b71ba905439972eb514a552ad3eb74f6e6de576c","scripts":{"dev":"tsup --watch","lint":"tsc --noEmit","build":"tsup"},"_npmUser":{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"},"_npmVersion":"10.8.2","description":"Core library for qualitylens — engine, types, sources, matchers, reporters","directories":{},"_nodeVersion":"20.20.1","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","chalk":"^5.3.0","js-yaml":"^4.1.0","fast-glob":"^3.3.2","typescript":"^5.4.0","@types/node":"^20.0.0","@types/js-yaml":"^4.0.9","@typescript-eslint/parser":"^8.57.2"},"_npmOperationalInternal":{"tmp":"tmp/qualitylens-core_0.2.4_1774783043455_0.5556184995926472","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@democratize-quality/qualitylens-core","version":"0.2.5","keywords":["testing","playwright","qa","coverage"],"author":{"name":"Raj Uppadhyay"},"license":"AGPL-3.0-only","_id":"@democratize-quality/qualitylens-core@0.2.5","maintainers":[{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"}],"dist":{"shasum":"f95fc50269e0184c1d1b92e32b2cee2867527dda","tarball":"https://registry.npmjs.org/@democratize-quality/qualitylens-core/-/qualitylens-core-0.2.5.tgz","fileCount":86,"integrity":"sha512-xiI2TgtKmFOnBuTQmPniVX4YwvCGDQlRQrE/ncvGgl/2S5HzaY+WifJHW/K8ob9qbJZy85PlNXRys+Aid54SDA==","signatures":[{"sig":"MEYCIQDiUzDhA+1/sfksiQDMsaxXYOVFV7heLoyv6ikHc9j+BgIhAK8SdGKTm2/yQGtn56jse9FWO7DBlFcGSTXzTVxqdzQV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":59269204},"main":"./dist/core/types.js","types":"./dist/core/types.d.ts","module":"./dist/core/types.mjs","engines":{"node":">=20.0.0"},"exports":{"./core/types":{"types":"./dist/core/types.d.ts","import":"./dist/core/types.mjs","require":"./dist/core/types.js"},"./utils/http":{"types":"./dist/utils/http.d.ts","import":"./dist/utils/http.mjs","require":"./dist/utils/http.js"},"./core/config":{"types":"./dist/core/config.d.ts","import":"./dist/core/config.mjs","require":"./dist/core/config.js"},"./core/engine":{"types":"./dist/core/engine.d.ts","import":"./dist/core/engine.mjs","require":"./dist/core/engine.js"},"./utils/logger":{"types":"./dist/utils/logger.d.ts","import":"./dist/utils/logger.mjs","require":"./dist/utils/logger.js"},"./core/detector":{"types":"./dist/core/detector.d.ts","import":"./dist/core/detector.mjs","require":"./dist/core/detector.js"},"./sources/base.source":{"types":"./dist/sources/base.source.d.ts","import":"./dist/sources/base.source.mjs","require":"./dist/sources/base.source.js"},"./sources/yaml.source":{"types":"./dist/sources/yaml.source.d.ts","import":"./dist/sources/yaml.source.mjs","require":"./dist/sources/yaml.source.js"},"./matchers/area.matcher":{"types":"./dist/matchers/area.matcher.d.ts","import":"./dist/matchers/area.matcher.mjs","require":"./dist/matchers/area.matcher.js"},"./sources/routes.source":{"types":"./dist/sources/routes.source.d.ts","import":"./dist/sources/routes.source.mjs","require":"./dist/sources/routes.source.js"},"./matchers/fuzzy.matcher":{"types":"./dist/matchers/fuzzy.matcher.d.ts","import":"./dist/matchers/fuzzy.matcher.mjs","require":"./dist/matchers/fuzzy.matcher.js"},"./reporters/base.reporter":{"types":"./dist/reporters/base.reporter.d.ts","import":"./dist/reporters/base.reporter.mjs","require":"./dist/reporters/base.reporter.js"},"./sources/playwright.source":{"types":"./dist/sources/playwright.source.d.ts","import":"./dist/sources/playwright.source.mjs","require":"./dist/sources/playwright.source.js"},"./reporters/console.reporter":{"types":"./dist/reporters/console.reporter.d.ts","import":"./dist/reporters/console.reporter.mjs","require":"./dist/reporters/console.reporter.js"}},"gitHead":"e21b8e52836eb71c53f126e87d2238547e0e8368","scripts":{"dev":"tsup --watch","lint":"tsc --noEmit","build":"tsup"},"_npmUser":{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"},"_npmVersion":"10.8.2","description":"Core library for qualitylens — engine, types, sources, matchers, reporters","directories":{},"_nodeVersion":"20.20.1","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","chalk":"^5.3.0","js-yaml":"^4.1.0","fast-glob":"^3.3.2","typescript":"^5.4.0","@types/node":"^20.0.0","@types/js-yaml":"^4.0.9","@typescript-eslint/parser":"^8.57.2"},"_npmOperationalInternal":{"tmp":"tmp/qualitylens-core_0.2.5_1774783541719_0.3476007685763054","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@democratize-quality/qualitylens-core","version":"0.2.6","keywords":["testing","playwright","qa","coverage"],"author":{"name":"Raj Uppadhyay"},"license":"AGPL-3.0-only","_id":"@democratize-quality/qualitylens-core@0.2.6","maintainers":[{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"}],"dist":{"shasum":"fd9de117acf2cdfc424809fcde124a6965603577","tarball":"https://registry.npmjs.org/@democratize-quality/qualitylens-core/-/qualitylens-core-0.2.6.tgz","fileCount":86,"integrity":"sha512-lr/iy02qRKte/BnmspumyyU1Z1pAR2FwgjeuHG1ieykihCip7tJvZ3N6l6FS+QIGW1/JBUZ4DBFpU/5+mzCNIQ==","signatures":[{"sig":"MEQCIFurVgoBfZEdSqY3coSUB+CPqYmuy1ZpJVzUEKaKce5jAiAL+DCWuk+qg6mLaQ6D93r/QvTYyMQvUSxv1y7k1lLUgA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":59274427},"main":"./dist/core/types.js","types":"./dist/core/types.d.ts","module":"./dist/core/types.mjs","engines":{"node":">=20.0.0"},"exports":{"./core/types":{"types":"./dist/core/types.d.ts","import":"./dist/core/types.mjs","require":"./dist/core/types.js"},"./utils/http":{"types":"./dist/utils/http.d.ts","import":"./dist/utils/http.mjs","require":"./dist/utils/http.js"},"./core/config":{"types":"./dist/core/config.d.ts","import":"./dist/core/config.mjs","require":"./dist/core/config.js"},"./core/engine":{"types":"./dist/core/engine.d.ts","import":"./dist/core/engine.mjs","require":"./dist/core/engine.js"},"./utils/logger":{"types":"./dist/utils/logger.d.ts","import":"./dist/utils/logger.mjs","require":"./dist/utils/logger.js"},"./core/detector":{"types":"./dist/core/detector.d.ts","import":"./dist/core/detector.mjs","require":"./dist/core/detector.js"},"./sources/base.source":{"types":"./dist/sources/base.source.d.ts","import":"./dist/sources/base.source.mjs","require":"./dist/sources/base.source.js"},"./sources/yaml.source":{"types":"./dist/sources/yaml.source.d.ts","import":"./dist/sources/yaml.source.mjs","require":"./dist/sources/yaml.source.js"},"./matchers/area.matcher":{"types":"./dist/matchers/area.matcher.d.ts","import":"./dist/matchers/area.matcher.mjs","require":"./dist/matchers/area.matcher.js"},"./sources/routes.source":{"types":"./dist/sources/routes.source.d.ts","import":"./dist/sources/routes.source.mjs","require":"./dist/sources/routes.source.js"},"./matchers/fuzzy.matcher":{"types":"./dist/matchers/fuzzy.matcher.d.ts","import":"./dist/matchers/fuzzy.matcher.mjs","require":"./dist/matchers/fuzzy.matcher.js"},"./reporters/base.reporter":{"types":"./dist/reporters/base.reporter.d.ts","import":"./dist/reporters/base.reporter.mjs","require":"./dist/reporters/base.reporter.js"},"./sources/playwright.source":{"types":"./dist/sources/playwright.source.d.ts","import":"./dist/sources/playwright.source.mjs","require":"./dist/sources/playwright.source.js"},"./reporters/console.reporter":{"types":"./dist/reporters/console.reporter.d.ts","import":"./dist/reporters/console.reporter.mjs","require":"./dist/reporters/console.reporter.js"}},"gitHead":"0a2b92d8ffb2e38e04f621b589ec1f9dabbbe7a8","scripts":{"dev":"tsup --watch","lint":"tsc --noEmit","build":"tsup"},"_npmUser":{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"},"_npmVersion":"10.8.2","description":"Core library for qualitylens — engine, types, sources, matchers, reporters","directories":{},"_nodeVersion":"20.20.1","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","chalk":"^5.3.0","js-yaml":"^4.1.0","fast-glob":"^3.3.2","typescript":"^5.4.0","@types/node":"^20.0.0","@types/js-yaml":"^4.0.9","@typescript-eslint/parser":"^8.57.2"},"_npmOperationalInternal":{"tmp":"tmp/qualitylens-core_0.2.6_1775131409718_0.6290044891600988","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"@democratize-quality/qualitylens-core","version":"0.2.7","keywords":["testing","playwright","qa","coverage"],"author":{"name":"Raj Uppadhyay"},"license":"AGPL-3.0-only","_id":"@democratize-quality/qualitylens-core@0.2.7","maintainers":[{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"}],"dist":{"shasum":"a0d9ab6d233350ee57b79e114a1ad5cb886e1009","tarball":"https://registry.npmjs.org/@democratize-quality/qualitylens-core/-/qualitylens-core-0.2.7.tgz","fileCount":86,"integrity":"sha512-7vk/p5DeW1FYP/fQYvcSXH1dQXpA9Cq9fv+Q1LVj04dc9kXgVSGDBmb6v1vvk6yBOXvMCNDpWBtvCWXGvJLjEA==","signatures":[{"sig":"MEQCIH1KFnBqjCIsYjOUOAjS8wNY3UR9n56Lc2suGwMwx6D4AiBvUPGZMmvbuTwKYUC3lfE/kLtfTPEYmIO+5RJS96FUAg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":59282283},"main":"./dist/core/types.js","types":"./dist/core/types.d.ts","module":"./dist/core/types.mjs","engines":{"node":">=20.0.0"},"exports":{"./core/types":{"types":"./dist/core/types.d.ts","import":"./dist/core/types.mjs","require":"./dist/core/types.js"},"./utils/http":{"types":"./dist/utils/http.d.ts","import":"./dist/utils/http.mjs","require":"./dist/utils/http.js"},"./core/config":{"types":"./dist/core/config.d.ts","import":"./dist/core/config.mjs","require":"./dist/core/config.js"},"./core/engine":{"types":"./dist/core/engine.d.ts","import":"./dist/core/engine.mjs","require":"./dist/core/engine.js"},"./utils/logger":{"types":"./dist/utils/logger.d.ts","import":"./dist/utils/logger.mjs","require":"./dist/utils/logger.js"},"./core/detector":{"types":"./dist/core/detector.d.ts","import":"./dist/core/detector.mjs","require":"./dist/core/detector.js"},"./sources/base.source":{"types":"./dist/sources/base.source.d.ts","import":"./dist/sources/base.source.mjs","require":"./dist/sources/base.source.js"},"./sources/yaml.source":{"types":"./dist/sources/yaml.source.d.ts","import":"./dist/sources/yaml.source.mjs","require":"./dist/sources/yaml.source.js"},"./matchers/area.matcher":{"types":"./dist/matchers/area.matcher.d.ts","import":"./dist/matchers/area.matcher.mjs","require":"./dist/matchers/area.matcher.js"},"./sources/routes.source":{"types":"./dist/sources/routes.source.d.ts","import":"./dist/sources/routes.source.mjs","require":"./dist/sources/routes.source.js"},"./matchers/fuzzy.matcher":{"types":"./dist/matchers/fuzzy.matcher.d.ts","import":"./dist/matchers/fuzzy.matcher.mjs","require":"./dist/matchers/fuzzy.matcher.js"},"./reporters/base.reporter":{"types":"./dist/reporters/base.reporter.d.ts","import":"./dist/reporters/base.reporter.mjs","require":"./dist/reporters/base.reporter.js"},"./sources/playwright.source":{"types":"./dist/sources/playwright.source.d.ts","import":"./dist/sources/playwright.source.mjs","require":"./dist/sources/playwright.source.js"},"./reporters/console.reporter":{"types":"./dist/reporters/console.reporter.d.ts","import":"./dist/reporters/console.reporter.mjs","require":"./dist/reporters/console.reporter.js"}},"gitHead":"f26f5823f2a17568a0c9fd05242e58de78d7c9ab","scripts":{"dev":"tsup --watch","lint":"tsc --noEmit","build":"tsup"},"_npmUser":{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"},"_npmVersion":"10.8.2","description":"Core library for qualitylens — engine, types, sources, matchers, reporters","directories":{},"_nodeVersion":"20.20.2","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","chalk":"^5.3.0","js-yaml":"^4.1.0","fast-glob":"^3.3.2","typescript":"^5.4.0","@types/node":"^20.0.0","@types/js-yaml":"^4.0.9","@typescript-eslint/parser":"^8.57.2"},"_npmOperationalInternal":{"tmp":"tmp/qualitylens-core_0.2.7_1775305692254_0.13090946006707993","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"@democratize-quality/qualitylens-core","version":"0.2.8","description":"Core library for qualitylens — engine, types, sources, matchers, reporters","author":{"name":"Raj Uppadhyay"},"license":"AGPL-3.0-only","main":"./dist/core/types.js","module":"./dist/core/types.mjs","types":"./dist/core/types.d.ts","exports":{"./core/types":{"types":"./dist/core/types.d.ts","import":"./dist/core/types.mjs","require":"./dist/core/types.js"},"./core/engine":{"types":"./dist/core/engine.d.ts","import":"./dist/core/engine.mjs","require":"./dist/core/engine.js"},"./core/config":{"types":"./dist/core/config.d.ts","import":"./dist/core/config.mjs","require":"./dist/core/config.js"},"./core/detector":{"types":"./dist/core/detector.d.ts","import":"./dist/core/detector.mjs","require":"./dist/core/detector.js"},"./sources/base.source":{"types":"./dist/sources/base.source.d.ts","import":"./dist/sources/base.source.mjs","require":"./dist/sources/base.source.js"},"./sources/playwright.source":{"types":"./dist/sources/playwright.source.d.ts","import":"./dist/sources/playwright.source.mjs","require":"./dist/sources/playwright.source.js"},"./sources/yaml.source":{"types":"./dist/sources/yaml.source.d.ts","import":"./dist/sources/yaml.source.mjs","require":"./dist/sources/yaml.source.js"},"./sources/routes.source":{"types":"./dist/sources/routes.source.d.ts","import":"./dist/sources/routes.source.mjs","require":"./dist/sources/routes.source.js"},"./matchers/fuzzy.matcher":{"types":"./dist/matchers/fuzzy.matcher.d.ts","import":"./dist/matchers/fuzzy.matcher.mjs","require":"./dist/matchers/fuzzy.matcher.js"},"./matchers/area.matcher":{"types":"./dist/matchers/area.matcher.d.ts","import":"./dist/matchers/area.matcher.mjs","require":"./dist/matchers/area.matcher.js"},"./reporters/base.reporter":{"types":"./dist/reporters/base.reporter.d.ts","import":"./dist/reporters/base.reporter.mjs","require":"./dist/reporters/base.reporter.js"},"./reporters/console.reporter":{"types":"./dist/reporters/console.reporter.d.ts","import":"./dist/reporters/console.reporter.mjs","require":"./dist/reporters/console.reporter.js"},"./utils/logger":{"types":"./dist/utils/logger.d.ts","import":"./dist/utils/logger.mjs","require":"./dist/utils/logger.js"},"./utils/http":{"types":"./dist/utils/http.d.ts","import":"./dist/utils/http.mjs","require":"./dist/utils/http.js"}},"scripts":{"build":"tsup","dev":"tsup --watch","lint":"tsc --noEmit"},"keywords":["testing","playwright","qa","coverage"],"dependencies":{"@typescript-eslint/parser":"^8.57.2","chalk":"^5.3.0","fast-glob":"^3.3.2","js-yaml":"^4.1.0"},"devDependencies":{"@types/js-yaml":"^4.0.9","@types/node":"^20.0.0","tsup":"^8.0.0","typescript":"^5.4.0"},"engines":{"node":">=20.0.0"},"publishConfig":{"registry":"https://registry.npmjs.org","access":"public"},"_id":"@democratize-quality/qualitylens-core@0.2.8","gitHead":"2cad980efd5feb5db95df3d4b46449c32e4e1cf0","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-fq9gEv02X3j2OPOikgNRFtx8QIdqShaac3ChzA9DAljPBEpmiGvo9SYRp6ZvPJmpMvdO9mwJzExrgFRakZ/Qew==","shasum":"fd0f6a1404b5490c3636a4003589879bbc8560bf","tarball":"https://registry.npmjs.org/@democratize-quality/qualitylens-core/-/qualitylens-core-0.2.8.tgz","fileCount":58,"unpackedSize":182572,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQC0x87T2c9itWkwkOm7LXQo2n//MXgB9ljhHHXk/WTDOgIgItf4ftqIZb8RX6JOK/60T4NYpiLEVVBmMWcxz9wRSFQ="}]},"_npmUser":{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"},"directories":{},"maintainers":[{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/qualitylens-core_0.2.8_1775306976880_0.6354734105325313"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-29T10:15:37.546Z","modified":"2026-04-04T12:49:37.160Z","0.1.0":"2026-03-29T10:15:37.764Z","0.2.0":"2026-03-29T10:44:18.036Z","0.2.1":"2026-03-29T10:59:47.426Z","0.2.2":"2026-03-29T11:05:37.013Z","0.2.4":"2026-03-29T11:17:23.883Z","0.2.5":"2026-03-29T11:25:42.123Z","0.2.6":"2026-04-02T12:03:30.114Z","0.2.7":"2026-04-04T12:28:12.659Z","0.2.8":"2026-04-04T12:49:37.027Z"},"author":{"name":"Raj Uppadhyay"},"license":"AGPL-3.0-only","keywords":["testing","playwright","qa","coverage"],"description":"Core library for qualitylens — engine, types, sources, matchers, reporters","maintainers":[{"name":"uppadhyayraj","email":"uppadhyayraj@hotmail.com"}],"readme":"# qualitylens\n\n> **Test coverage map — automated + manual, by functional area.**\n> Know exactly what's tested, what isn't, and where the risk is — before every release.\n\n---\n\n## The problem\n\nYour CI is green. Your Playwright suite has 600 tests. But does `/billing/refund` have a test?\nDoes `/onboarding/import-data`? When was `/auth/sso` last tested manually?\n\nNobody knows. Until production breaks.\n\n`qualitylens` answers the question your coverage tool can't:\n**\"Which user-facing flows have no test coverage — automated or manual?\"**\n\n---\n\n## Free vs Pro\n\n| Feature | Free (`qualitylens`) | Pro (`qualitylens` + `qualitylens-pro`) |\n|---------|-----------------|--------------------------------|\n| Playwright test source | ✅ | ✅ |\n| YAML manual coverage | ✅ | ✅ |\n| Console reporter | ✅ | ✅ |\n| `qualitylens init` / `validate` | ✅ | ✅ |\n| CI `--fail-under` gate | ✅ | ✅ |\n| HTML reporter | — | ✅ |\n| JSON reporter | — | ✅ |\n| Markdown reporter | — | ✅ |\n| Azure DevOps Test Plans | — | ✅ |\n\nBoth tiers use the single `qualitylens` binary. Pro features activate automatically when `qualitylens-pro` is installed alongside.\n\n---\n\n## Installation\n\n**Free:**\n```bash\nnpm install -g @democratize-quality/qualitylens\n```\n\n**Pro:**\n```bash\nnpm install -g @democratize-quality/qualitylens @democratize-quality/qualitylens-pro\n```\n\nNo config change needed — the CLI detects `qualitylens-pro` at runtime.\n\n---\n\n## Quick start\n\n```bash\nnpx @democratize-quality/qualitylens init   # creates qualitylens.yaml in your project root\nnpx @democratize-quality/qualitylens scan   # generates console report (+ HTML/JSON/MD with Pro)\n```\n\nSample output:\n\n```\nqualitylens: 68% total coverage (41% auto, 27% manual, 32% none)\n\nAuthentication         ████████████████████ 92% ✅\nCheckout & Payments    ████████████░░░░░░░░ 54% ⚠️\nOnboarding             ████████████░░░░░░░░ 60% ⚠️\nAdmin & Settings       █████░░░░░░░░░░░░░░░ 28% ❌\n\nNo coverage found (8 routes):\n  ❌ /checkout/promo-code\n  ❌ /billing/refund\n  ❌ /billing/invoice-download\n  ❌ /admin/billing-settings\n  ❌ /admin/permissions\n  ❌ /admin/audit-log\n  ❌ /onboarding/import-data\n  ❌ /auth/mfa-setup\n\nStale manual coverage (>30 days, 2 routes):\n  ⚠️  /onboarding/welcome     — last tested 34d ago (priya)\n  ⚠️  /onboarding/profile-setup — last tested 34d ago (priya)\n```\n\n---\n\n## How it works\n\n`qualitylens` combines test sources against your app routes:\n\n| Source | What it reads | How | Tier |\n|--------|--------------|-----|------|\n| Playwright | `*.spec.ts` test titles | AST parsing | Free |\n| YAML | `manualCoverage` entries | YAML file | Free |\n| Azure DevOps | Test Plan test case names | REST API | Pro |\n\nIt fuzzy-matches test descriptions against your app's routes, groups them by functional area, and reports what's covered, what's manual-only, what's stale, and what has no coverage at all.\n\nSee [docs/HOW_IT_WORKS.md](docs/HOW_IT_WORKS.md) for full details.\n\n---\n\n## Configuration\n\nPlace a `qualitylens.yaml` in your project root:\n\n```yaml\nprojectName: my-saas-app\nstaleThresholdDays: 30\n\nroutes:\n  type: nextjs\n  path: ./pages\n\nareas:\n  - name: Checkout & Payments\n    patterns: [/checkout, /billing]\n  - name: Authentication\n    patterns: [/auth, /login]\n\n# Optional: Azure DevOps Test Plans\n# ado:\n#   orgUrl: https://dev.azure.com/myorg\n#   project: MyProject\n#   planId: 42\n#   patEnvVar: ADO_PAT\n\n# Manual coverage (from Excel, exploratory testing, etc.)\nmanualCoverage:\n  - route: /auth/sso\n    lastTested: 2025-03-01\n    tester: james\n\n# CI gates\nthresholds:\n  - area: Checkout & Payments\n    minCoverage: 70\n```\n\nFull reference: [docs/CONFIGURATION.md](docs/CONFIGURATION.md)\n\n---\n\n## CLI reference\n\n```bash\nqualitylens scan [options]\n  --config <path>       path to qualitylens.yaml (default: ./qualitylens.yaml)\n  --output <path>       output directory (default: ./)\n  --format <formats>    console (free) | html,json,markdown (Pro) — comma-separated\n  --since <branch>      only show routes changed since this git branch\n  --fail-under <n>      exit 1 if total coverage < n (CI gate)\n\nqualitylens init            interactive setup — creates qualitylens.yaml\nqualitylens validate        checks config and ADO connection\n```\n\n> **Pro formats** — if you run `--format html` without `qualitylens-pro` installed, qualitylens prints an install hint and continues. Nothing crashes.\n\n---\n\n## CI integration\n\n**Free:**\n```yaml\n- name: Run qualitylens\n  run: npx @democratize-quality/qualitylens scan --format console --fail-under 60\n```\n\n**Pro** (HTML + JSON report, ADO source):\n```yaml\n- name: Run qualitylens Pro\n  run: npx @democratize-quality/qualitylens scan --format html,json,console --fail-under 60\n  env:\n    ADO_PAT: ${{ secrets.ADO_PAT }}\n```\n\nFull examples: [docs/CI_INTEGRATION.md](docs/CI_INTEGRATION.md)\n\n---\n\n## VS Code extension (Pro)\n\nThe qualitylens Pro VS Code extension shows a live coverage dashboard in your sidebar.\nThe panel updates automatically when `qualitylens.yaml` changes. Requires `qualitylens-pro`.\n\n---\n\n## Built by\n\n**Raj Uppadhyay** — author of *Scalable Test Automation with Playwright*\n\nRelated tools:\n- [playwright-mcp-yaml](https://npmjs.com/package/playwright-mcp-yaml)\n- [ADO Testing Extension](https://marketplace.visualstudio.com/items?itemName=RajUppadhyay.ado-testingextension)\n","readmeFilename":"README.md"}