{"_id":"@anatolykhelmer/deep-cover","_rev":"22-fa3c425fcb3f5cb2f45fa7a35983b57a","name":"@anatolykhelmer/deep-cover","dist-tags":{"latest":"0.10.1"},"versions":{"0.1.0":{"name":"@anatolykhelmer/deep-cover","version":"0.1.0","keywords":["coverage","testing","code-quality","agentic","jest","typescript","mutation-testing","assertion-quality"],"author":{"name":"Anatoly Khelmer","email":"anatoly.khelmer@gmail.com"},"license":"MIT","_id":"@anatolykhelmer/deep-cover@0.1.0","maintainers":[{"name":"anatolykhelmer","email":"anatoly.khelmer@gmail.com"}],"homepage":"https://github.com/anatolykhelmer/deepcover#readme","bugs":{"url":"https://github.com/anatolykhelmer/deepcover/issues"},"bin":{"deepcover":"dist/cli/index.js"},"dist":{"shasum":"6f209080eb40ad94b5edeb2acb8a4d841080a8fd","tarball":"https://registry.npmjs.org/@anatolykhelmer/deep-cover/-/deep-cover-0.1.0.tgz","fileCount":191,"integrity":"sha512-ftv2JRiuP5sxWKyQFufyFTxOYYVuF2sgYEjvfk/r0ANpe+oNK2jAQ8nyLbjrBwTmL0Bf42IEjVBkiUd4Vd56rA==","signatures":[{"sig":"MEUCIQCKKX8b9KZFBgOI6XC3GPG+rd4FNIKZhNxKDWdtFOu2EQIgUdX0PmbcviNmTfWGQfCxgvfvvH+y6W/YUF9AnMnYX4E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":415662},"jest":{"preset":"ts-jest","testRegex":".*\\.spec\\.ts$","testEnvironment":"node","collectCoverageFrom":["src/**/*.ts","!src/**/*.spec.ts","!src/types/**"],"testPathIgnorePatterns":["/node_modules/","paradigm-e2e"]},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./reporter":{"types":"./dist/reporter/index.d.ts","require":"./dist/reporter/index.js"}},"gitHead":"1b144a4b249347f55b8077a8a84c45b6bdb5c94e","scripts":{"test":"jest","build":"tsc","deepcover":"tsx src/cli/index.ts","test:watch":"jest --watch","prepublishOnly":"npm run build","test:paradigms":"jest --testPathPatterns=paradigm-unit","test:paradigms:e2e":"jest --config jest.e2e.config.js"},"_npmUser":{"name":"anatolykhelmer","email":"anatoly.khelmer@gmail.com"},"repository":{"url":"git+https://github.com/anatolykhelmer/deepcover.git","type":"git"},"_npmVersion":"11.17.0","description":"Agentic code coverage analyzer","directories":{},"_nodeVersion":"26.4.0","dependencies":{"zod":"^4.3.6","glob":"^13.0.6","ts-morph":"^27.0.2","commander":"^14.0.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.3.0","ts-jest":"^29.4.6","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^25.5.0"},"peerDependencies":{"@anthropic-ai/sdk":">=0.39.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/deep-cover_0.1.0_1786013839123_0.27743883699685856","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @anatolykhelmer/deepcover"},"0.1.1":{"name":"@anatolykhelmer/deep-cover","version":"0.1.1","keywords":["coverage","testing","code-quality","agentic","jest","typescript","mutation-testing","assertion-quality"],"author":{"name":"Anatoly Khelmer","email":"anatoly.khelmer@gmail.com"},"license":"MIT","_id":"@anatolykhelmer/deep-cover@0.1.1","maintainers":[{"name":"anatolykhelmer","email":"anatoly.khelmer@gmail.com"}],"homepage":"https://github.com/anatolykhelmer/deepcover#readme","bugs":{"url":"https://github.com/anatolykhelmer/deepcover/issues"},"bin":{"deepcover":"dist/cli/index.js"},"dist":{"shasum":"f5de68a8a1503a3dfdb722341b56a9597ab3ae96","tarball":"https://registry.npmjs.org/@anatolykhelmer/deep-cover/-/deep-cover-0.1.1.tgz","fileCount":191,"integrity":"sha512-c+AnuGNwdX0DzHpep763uAkODRtzaSDETh/XwyAf32XbpAynhtD2H/97TkmKIXApRiSOlsk7grSDwVeFZozddw==","signatures":[{"sig":"MEYCIQCKVsRl4E8bBHTLq3T5U0ODQ3MiUQsNd3mkxgGBTz2tPAIhAKK3d6N+Rqgd/4tOMHXCjZy8be9PrqIOhjGIckh6Ftow","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":415738},"jest":{"preset":"ts-jest","testRegex":".*\\.spec\\.ts$","testEnvironment":"node","collectCoverageFrom":["src/**/*.ts","!src/**/*.spec.ts","!src/types/**"],"testPathIgnorePatterns":["/node_modules/","paradigm-e2e"]},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./reporter":{"types":"./dist/reporter/index.d.ts","require":"./dist/reporter/index.js"}},"gitHead":"1b144a4b249347f55b8077a8a84c45b6bdb5c94e","scripts":{"test":"jest","build":"tsc","deepcover":"tsx src/cli/index.ts","test:watch":"jest --watch","prepublishOnly":"npm run build","test:paradigms":"jest --testPathPatterns=paradigm-unit","test:paradigms:e2e":"jest --config jest.e2e.config.js"},"_npmUser":{"name":"anatolykhelmer","email":"anatoly.khelmer@gmail.com"},"repository":{"url":"git+https://github.com/anatolykhelmer/deepcover.git","type":"git"},"_npmVersion":"11.17.0","description":"Agentic code coverage analyzer","directories":{},"_nodeVersion":"26.4.0","dependencies":{"zod":"^4.3.6","glob":"^13.0.6","ts-morph":"^27.0.2","commander":"^14.0.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.3.0","ts-jest":"^29.4.6","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^25.5.0"},"peerDependencies":{"@anthropic-ai/sdk":">=0.39.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/deep-cover_0.1.1_1786014157922_0.385435956938198","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @anatolykhelmer/deepcover"},"0.1.2":{"name":"@anatolykhelmer/deep-cover","version":"0.1.2","keywords":["coverage","testing","code-quality","agentic","jest","typescript","mutation-testing","assertion-quality"],"author":{"name":"Anatoly Khelmer","email":"anatoly.khelmer@gmail.com"},"license":"MIT","_id":"@anatolykhelmer/deep-cover@0.1.2","maintainers":[{"name":"anatolykhelmer","email":"anatoly.khelmer@gmail.com"}],"homepage":"https://github.com/anatolykhelmer/deepcover#readme","bugs":{"url":"https://github.com/anatolykhelmer/deepcover/issues"},"bin":{"deepcover":"dist/cli/index.js"},"dist":{"shasum":"0bd1884e7e98359810efbd2f3e22b92e7bd2bf96","tarball":"https://registry.npmjs.org/@anatolykhelmer/deep-cover/-/deep-cover-0.1.2.tgz","fileCount":196,"integrity":"sha512-ahi3utUDiLdb+TM/0WyUrt03O5yQ2adu+7UqoPSCKSWTuQcJ/p2Q8HdjjZqiDhIrruu373Aw1OIrwD347PYP2w==","signatures":[{"sig":"MEUCIBcCniQAztiLN0qgJw3ICQdq6MZs0AHhB/atAdxYVSo1AiEAuOaPmd3Cd7aKW27PW6PPaWpNkAToNI7KfNdZrEBqVXY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":424826},"jest":{"preset":"ts-jest","testRegex":".*\\.spec\\.ts$","testEnvironment":"node","collectCoverageFrom":["src/**/*.ts","!src/**/*.spec.ts","!src/types/**"],"testPathIgnorePatterns":["/node_modules/","paradigm-e2e"]},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./reporter":{"types":"./dist/reporter/index.d.ts","require":"./dist/reporter/index.js"}},"gitHead":"22409dbd5072ff287619da5cd1b8912acac8f46b","scripts":{"test":"jest","build":"tsc","deepcover":"tsx src/cli/index.ts","test:watch":"jest --watch","prepublishOnly":"npm run build","test:paradigms":"jest --testPathPatterns=paradigm-unit","test:paradigms:e2e":"jest --config jest.e2e.config.js"},"_npmUser":{"name":"anatolykhelmer","email":"anatoly.khelmer@gmail.com"},"repository":{"url":"git+https://github.com/anatolykhelmer/deepcover.git","type":"git"},"_npmVersion":"11.17.0","description":"Agentic code coverage analyzer","directories":{},"_nodeVersion":"26.4.0","dependencies":{"zod":"^4.3.6","glob":"^13.0.6","ts-morph":"^27.0.2","commander":"^14.0.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.3.0","ts-jest":"^29.4.6","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^25.5.0"},"peerDependencies":{"@anthropic-ai/sdk":">=0.39.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/deep-cover_0.1.2_1786015032735_0.5043238635116163","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @anatolykhelmer/deepcover"},"0.1.3":{"name":"@anatolykhelmer/deep-cover","version":"0.1.3","keywords":["coverage","testing","code-quality","agentic","jest","typescript","mutation-testing","assertion-quality"],"author":{"name":"Anatoly Khelmer","email":"anatoly.khelmer@gmail.com"},"license":"MIT","_id":"@anatolykhelmer/deep-cover@0.1.3","maintainers":[{"name":"anatolykhelmer","email":"anatoly.khelmer@gmail.com"}],"homepage":"https://github.com/anatolykhelmer/deepcover#readme","bugs":{"url":"https://github.com/anatolykhelmer/deepcover/issues"},"bin":{"deepcover":"dist/cli/index.js"},"dist":{"shasum":"062b116c01a9644b9af41ab4501e9a8be780821c","tarball":"https://registry.npmjs.org/@anatolykhelmer/deep-cover/-/deep-cover-0.1.3.tgz","fileCount":196,"integrity":"sha512-xW0OuLiV6Pq+r8wfvY67GzEf/yvU4t9agW24PBwEk8bAOTua1YyyqSSM1tZ8ma9nO3y2yJm21DAC24lgGQv9vA==","signatures":[{"sig":"MEYCIQCqNpsVsuc/DjSmRlEBYqCGhFDO4oYFMV7deS4lT7PR0wIhAJXwtzLZJOO1ctm+C6tGU5K846YzAS8r7P9AnjWSj44n","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":426929},"jest":{"preset":"ts-jest","testRegex":".*\\.spec\\.ts$","testEnvironment":"node","collectCoverageFrom":["src/**/*.ts","!src/**/*.spec.ts","!src/types/**"],"testPathIgnorePatterns":["/node_modules/","paradigm-e2e"]},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./reporter":{"types":"./dist/reporter/index.d.ts","require":"./dist/reporter/index.js"}},"gitHead":"46d85f0a6d03a69c3ed4b3b94637d3ffd0267a9e","scripts":{"test":"jest","build":"tsc","deepcover":"tsx src/cli/index.ts","test:watch":"jest --watch","prepublishOnly":"npm run build","test:paradigms":"jest --testPathPatterns=paradigm-unit","test:paradigms:e2e":"jest --config jest.e2e.config.js"},"_npmUser":{"name":"anatolykhelmer","email":"anatoly.khelmer@gmail.com"},"repository":{"url":"git+https://github.com/anatolykhelmer/deepcover.git","type":"git"},"_npmVersion":"11.17.0","description":"Agentic code coverage analyzer","directories":{},"_nodeVersion":"26.4.0","dependencies":{"zod":"^4.3.6","glob":"^13.0.6","ts-morph":"^27.0.2","commander":"^14.0.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.3.0","ts-jest":"^29.4.6","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^25.5.0"},"peerDependencies":{"@anthropic-ai/sdk":">=0.39.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/deep-cover_0.1.3_1786015975450_0.19636718041482482","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @anatolykhelmer/deepcover"},"0.1.4":{"name":"@anatolykhelmer/deep-cover","version":"0.1.4","keywords":["coverage","testing","code-quality","agentic","jest","typescript","mutation-testing","assertion-quality"],"author":{"name":"Anatoly Khelmer","email":"anatoly.khelmer@gmail.com"},"license":"MIT","_id":"@anatolykhelmer/deep-cover@0.1.4","maintainers":[{"name":"anatolykhelmer","email":"anatoly.khelmer@gmail.com"}],"homepage":"https://github.com/anatolykhelmer/deepcover#readme","bugs":{"url":"https://github.com/anatolykhelmer/deepcover/issues"},"bin":{"deepcover":"dist/cli/index.js"},"dist":{"shasum":"187e4f43e9a3106a6f922801b50013606250f467","tarball":"https://registry.npmjs.org/@anatolykhelmer/deep-cover/-/deep-cover-0.1.4.tgz","fileCount":196,"integrity":"sha512-/N1eIH72dGPRDeDDWQHjIZ7u8/2vHLjAJUdoQ58Cf8Bc/9bLgwBfS8nDFAVhG1gwwnr+mC0kPgqHeape9ndg9g==","signatures":[{"sig":"MEYCIQCksmifoVMYTLLDJ/q9vyatwfbRV89uK1vR9mV4wbdYxgIhAOXj2+tmsNn2PCpdjnbwgdN1L5oCn5QkVaQSwrLk5qb0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":431067},"jest":{"preset":"ts-jest","testRegex":".*\\.spec\\.ts$","testEnvironment":"node","collectCoverageFrom":["src/**/*.ts","!src/**/*.spec.ts","!src/types/**"],"testPathIgnorePatterns":["/node_modules/","paradigm-e2e"]},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./reporter":{"types":"./dist/reporter/index.d.ts","require":"./dist/reporter/index.js"}},"gitHead":"425df1cc12b868f11d23e4e207cc29bda6853c77","scripts":{"test":"jest","build":"tsc","deepcover":"tsx src/cli/index.ts","test:watch":"jest --watch","prepublishOnly":"npm run build","test:paradigms":"jest --testPathPatterns=paradigm-unit","test:paradigms:e2e":"jest --config jest.e2e.config.js"},"_npmUser":{"name":"anatolykhelmer","email":"anatoly.khelmer@gmail.com"},"repository":{"url":"git+https://github.com/anatolykhelmer/deepcover.git","type":"git"},"_npmVersion":"11.17.0","description":"Agentic code coverage analyzer","directories":{},"_nodeVersion":"26.4.0","dependencies":{"zod":"^4.3.6","glob":"^13.0.6","ts-morph":"^27.0.2","commander":"^14.0.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.3.0","ts-jest":"^29.4.6","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^25.5.0"},"peerDependencies":{"@anthropic-ai/sdk":">=0.39.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/deep-cover_0.1.4_1786024647599_0.01786785177186556","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @anatolykhelmer/deepcover"},"0.1.5":{"name":"@anatolykhelmer/deep-cover","version":"0.1.5","keywords":["coverage","testing","code-quality","agentic","jest","typescript","mutation-testing","assertion-quality"],"author":{"name":"Anatoly Khelmer","email":"anatoly.khelmer@gmail.com"},"license":"MIT","_id":"@anatolykhelmer/deep-cover@0.1.5","maintainers":[{"name":"anatolykhelmer","email":"anatoly.khelmer@gmail.com"}],"homepage":"https://github.com/anatolykhelmer/deepcover#readme","bugs":{"url":"https://github.com/anatolykhelmer/deepcover/issues"},"bin":{"deepcover":"dist/cli/index.js"},"dist":{"shasum":"d0935eafd13b79e143a0166755aeffe60fae6b02","tarball":"https://registry.npmjs.org/@anatolykhelmer/deep-cover/-/deep-cover-0.1.5.tgz","fileCount":204,"integrity":"sha512-ecOujRQ18w0FC9LI3+7ivxTO+uc22bKcOA/YQR9T1Yjp8ZOsLW7EmluZTEEwTG9LEpKVBSJoa3JL+3vQe/i8Lw==","signatures":[{"sig":"MEQCIGJrgw8bRJ690ACBV3dM6VLk1zrVDtUXPvLry7nQe5cGAiAzsmutaxM2GR7WUil4eLibXPsUHeCjQeTEHDuNRDlGQQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":489208},"jest":{"preset":"ts-jest","testRegex":".*\\.spec\\.ts$","testEnvironment":"node","collectCoverageFrom":["src/**/*.ts","!src/**/*.spec.ts","!src/types/**"],"testPathIgnorePatterns":["/node_modules/","paradigm-e2e","/docs/"]},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./reporter":{"types":"./dist/reporter/index.d.ts","require":"./dist/reporter/index.js"}},"gitHead":"6089c31d93c7c9774ad78bd901c2ee2535ddcb15","scripts":{"test":"jest","build":"tsc","deepcover":"tsx src/cli/index.ts","test:watch":"jest --watch","prepublishOnly":"npm run build","test:paradigms":"jest --testPathPatterns=paradigm-unit","test:paradigms:e2e":"jest --config jest.e2e.config.js"},"_npmUser":{"name":"anatolykhelmer","email":"anatoly.khelmer@gmail.com"},"repository":{"url":"git+https://github.com/anatolykhelmer/deepcover.git","type":"git"},"_npmVersion":"11.17.0","description":"Agentic code coverage analyzer","directories":{},"_nodeVersion":"26.4.0","dependencies":{"zod":"^4.3.6","glob":"^13.0.6","ts-morph":"^27.0.2","commander":"^14.0.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.3.0","ts-jest":"^29.4.6","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^25.5.0"},"peerDependencies":{"@anthropic-ai/sdk":">=0.39.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/deep-cover_0.1.5_1786103882979_0.6638005407580654","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @anatolykhelmer/deepcover"},"0.2.0":{"name":"@anatolykhelmer/deep-cover","version":"0.2.0","keywords":["coverage","testing","code-quality","agentic","jest","typescript","mutation-testing","assertion-quality"],"author":{"name":"Anatoly Khelmer","email":"anatoly.khelmer@gmail.com"},"license":"MIT","_id":"@anatolykhelmer/deep-cover@0.2.0","maintainers":[{"name":"anatolykhelmer","email":"anatoly.khelmer@gmail.com"}],"homepage":"https://github.com/anatolykhelmer/deepcover#readme","bugs":{"url":"https://github.com/anatolykhelmer/deepcover/issues"},"bin":{"deepcover":"dist/cli/index.js"},"dist":{"shasum":"796eb2adf64f72b9f38d27e4cb03b2d2a2843e89","tarball":"https://registry.npmjs.org/@anatolykhelmer/deep-cover/-/deep-cover-0.2.0.tgz","fileCount":208,"integrity":"sha512-d1yyGB0VGa3DBXycnXoMg//JHhi5qP4B28AHXfZfwbFP3obsnoJn+hs59nWqT3tM5K9kafOEcy4QT+DjPexckg==","signatures":[{"sig":"MEYCIQDxt/Pj+Upl/HdX7ssW1zYSyHuAym7B6m4cp/ItsecWHgIhAPN6g9qi/SbFFFTVQDQqzNxZfaYSYrRb2zaY5fHlykqr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":500754},"jest":{"preset":"ts-jest","testRegex":".*\\.spec\\.ts$","testEnvironment":"node","collectCoverageFrom":["src/**/*.ts","!src/**/*.spec.ts","!src/types/**"],"testPathIgnorePatterns":["/node_modules/","paradigm-e2e","/docs/"]},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./reporter":{"types":"./dist/reporter/index.d.ts","require":"./dist/reporter/index.js"}},"gitHead":"cb0567fe889728d41e8fd1583598d702a4e1cdee","scripts":{"test":"jest","build":"tsc","deepcover":"tsx src/cli/index.ts","test:watch":"jest --watch","prepublishOnly":"npm run build","test:paradigms":"jest --testPathPatterns=paradigm-unit","test:paradigms:e2e":"jest --config jest.e2e.config.js"},"_npmUser":{"name":"anatolykhelmer","email":"anatoly.khelmer@gmail.com"},"repository":{"url":"git+https://github.com/anatolykhelmer/deepcover.git","type":"git"},"_npmVersion":"11.17.0","description":"Agentic code coverage analyzer","directories":{},"_nodeVersion":"26.4.0","dependencies":{"zod":"^4.3.6","glob":"^13.0.6","ts-morph":"^27.0.2","commander":"^14.0.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.3.0","ts-jest":"^29.4.6","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^25.5.0"},"peerDependencies":{"@anthropic-ai/sdk":">=0.39.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/deep-cover_0.2.0_1786279600213_0.3847447899333274","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @anatolykhelmer/deepcover"},"0.2.1":{"name":"@anatolykhelmer/deep-cover","version":"0.2.1","keywords":["coverage","testing","code-quality","agentic","jest","typescript","mutation-testing","assertion-quality"],"author":{"name":"Anatoly Khelmer","email":"anatoly.khelmer@gmail.com"},"license":"MIT","_id":"@anatolykhelmer/deep-cover@0.2.1","maintainers":[{"name":"anatolykhelmer","email":"anatoly.khelmer@gmail.com"}],"homepage":"https://github.com/anatolykhelmer/deepcover#readme","bugs":{"url":"https://github.com/anatolykhelmer/deepcover/issues"},"bin":{"deepcover":"dist/cli/index.js"},"dist":{"shasum":"cf0272084807b2c206f3bfd19d8b54285ab9038f","tarball":"https://registry.npmjs.org/@anatolykhelmer/deep-cover/-/deep-cover-0.2.1.tgz","fileCount":212,"integrity":"sha512-evqtYgYSHp6cgImAIJyHLUyqhhEKnUfD/MTc1CsGfjgYPE9cqQu+r3/S6Fz4N9eXY4UuXCvQGLIPRQbMTdlXTw==","signatures":[{"sig":"MEYCIQDj2/aigOmVpWI8kwWa+094tMIH4ZL63r5rAlHV9y3GOgIhAODYvLC+wmsJxh/N3C7+6zPN782PqG1IGIlMfCYjVycL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":506748},"jest":{"preset":"ts-jest","testRegex":".*\\.spec\\.ts$","testEnvironment":"node","collectCoverageFrom":["src/**/*.ts","!src/**/*.spec.ts","!src/types/**"],"testPathIgnorePatterns":["/node_modules/","paradigm-e2e","/docs/"]},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./reporter":{"types":"./dist/reporter/index.d.ts","require":"./dist/reporter/index.js"}},"gitHead":"83128482220ad477e848557f92ebef9bfe73d00b","scripts":{"test":"jest","build":"tsc","deepcover":"tsx src/cli/index.ts","test:watch":"jest --watch","prepublishOnly":"npm run build","test:paradigms":"jest --testPathPatterns=paradigm-unit","test:paradigms:e2e":"jest --config jest.e2e.config.js"},"_npmUser":{"name":"anatolykhelmer","email":"anatoly.khelmer@gmail.com"},"repository":{"url":"git+https://github.com/anatolykhelmer/deepcover.git","type":"git"},"_npmVersion":"11.17.0","description":"Agentic code coverage analyzer","directories":{},"_nodeVersion":"26.4.0","dependencies":{"zod":"^4.3.6","glob":"^13.0.6","ts-morph":"^27.0.2","commander":"^14.0.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.3.0","ts-jest":"^29.4.6","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^25.5.0"},"peerDependencies":{"@anthropic-ai/sdk":">=0.39.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/deep-cover_0.2.1_1786284187528_0.6543395618139678","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @anatolykhelmer/deepcover"},"0.2.2":{"name":"@anatolykhelmer/deep-cover","version":"0.2.2","keywords":["coverage","testing","code-quality","agentic","jest","typescript","mutation-testing","assertion-quality"],"author":{"name":"Anatoly Khelmer","email":"anatoly.khelmer@gmail.com"},"license":"MIT","_id":"@anatolykhelmer/deep-cover@0.2.2","maintainers":[{"name":"anatolykhelmer","email":"anatoly.khelmer@gmail.com"}],"homepage":"https://github.com/anatolykhelmer/deepcover#readme","bugs":{"url":"https://github.com/anatolykhelmer/deepcover/issues"},"bin":{"deepcover":"dist/cli/index.js"},"dist":{"shasum":"00a2b5fa70ae64fd781be6ca2d37a74927b146f6","tarball":"https://registry.npmjs.org/@anatolykhelmer/deep-cover/-/deep-cover-0.2.2.tgz","fileCount":216,"integrity":"sha512-ZUkmxWt9IRu1z93mr2rc0w7BYWCTJZWpdaxvNNsKUkvPTjQqhJBrzqag3Th7GVPCzz2qWd2rzg/MxdH7EXJ+Ag==","signatures":[{"sig":"MEYCIQD/iBZdjJ9BH3sPLeUEiUNh5ybJi6TbJAhX2+K8rm3d7QIhALitkDend9to+fsqi4vmn6trOe2VI3u0l3mRjZ/mK/t5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":520257},"jest":{"preset":"ts-jest","testRegex":".*\\.spec\\.ts$","testEnvironment":"node","collectCoverageFrom":["src/**/*.ts","!src/**/*.spec.ts","!src/types/**"],"testPathIgnorePatterns":["/node_modules/","paradigm-e2e","/docs/"]},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./reporter":{"types":"./dist/reporter/index.d.ts","require":"./dist/reporter/index.js"}},"gitHead":"c97afc0ad62e241b9c2ccd5b6157bb7cdef9f9d7","scripts":{"test":"jest","build":"tsc","deepcover":"tsx src/cli/index.ts","test:watch":"jest --watch","prepublishOnly":"npm run build","test:paradigms":"jest --testPathPatterns=paradigm-unit","test:paradigms:e2e":"jest --config jest.e2e.config.js"},"_npmUser":{"name":"anatolykhelmer","email":"anatoly.khelmer@gmail.com"},"repository":{"url":"git+https://github.com/anatolykhelmer/deepcover.git","type":"git"},"_npmVersion":"11.17.0","description":"Agentic code coverage analyzer","directories":{},"_nodeVersion":"26.4.0","dependencies":{"zod":"^4.3.6","glob":"^13.0.6","ts-morph":"^27.0.2","commander":"^14.0.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.3.0","ts-jest":"^29.4.6","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^25.5.0"},"peerDependencies":{"@anthropic-ai/sdk":">=0.39.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/deep-cover_0.2.2_1786338030878_0.6963380529949108","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @anatolykhelmer/deepcover"},"0.2.3":{"name":"@anatolykhelmer/deep-cover","version":"0.2.3","keywords":["coverage","testing","code-quality","agentic","jest","typescript","mutation-testing","assertion-quality"],"author":{"name":"Anatoly Khelmer","email":"anatoly.khelmer@gmail.com"},"license":"MIT","_id":"@anatolykhelmer/deep-cover@0.2.3","maintainers":[{"name":"anatolykhelmer","email":"anatoly.khelmer@gmail.com"}],"homepage":"https://github.com/anatolykhelmer/deepcover#readme","bugs":{"url":"https://github.com/anatolykhelmer/deepcover/issues"},"bin":{"deepcover":"dist/cli/index.js"},"dist":{"shasum":"4a94a3e91b27231a7a33712757567c17487cf6a9","tarball":"https://registry.npmjs.org/@anatolykhelmer/deep-cover/-/deep-cover-0.2.3.tgz","fileCount":224,"integrity":"sha512-//U141VA6SE1TnTG3MKYzkvfjLaS3sJ5O/SqshS89z7si50caw+TGbWMZDe1zMQ0d2j6RWvJ+H6+NAyDnDz4eQ==","signatures":[{"sig":"MEYCIQDk7bFbzgZtNFn0tQ7dJIhWLl1dtxjKUO0JIZ5nfv2+owIhAKFcCwUVzBoqOlrNJdGvfqKsySHRNd7qs5r4G9jaXcny","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":535629},"jest":{"preset":"ts-jest","testRegex":".*\\.spec\\.ts$","testEnvironment":"node","collectCoverageFrom":["src/**/*.ts","!src/**/*.spec.ts","!src/types/**"],"testPathIgnorePatterns":["/node_modules/","paradigm-e2e","/docs/"]},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./reporter":{"types":"./dist/reporter/index.d.ts","require":"./dist/reporter/index.js"}},"gitHead":"4802c1cacd1dc0c95b87f6f2710213f60967fcc7","scripts":{"test":"jest","build":"tsc","deepcover":"tsx src/cli/index.ts","test:watch":"jest --watch","prepublishOnly":"npm run build","test:paradigms":"jest --testPathPatterns=paradigm-unit","test:paradigms:e2e":"jest --config jest.e2e.config.js"},"_npmUser":{"name":"anatolykhelmer","email":"anatoly.khelmer@gmail.com"},"repository":{"url":"git+https://github.com/anatolykhelmer/deepcover.git","type":"git"},"_npmVersion":"11.17.0","description":"Agentic code coverage analyzer","directories":{},"_nodeVersion":"26.4.0","dependencies":{"zod":"^4.3.6","glob":"^13.0.6","ts-morph":"^27.0.2","commander":"^14.0.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.3.0","ts-jest":"^29.4.6","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^25.5.0"},"peerDependencies":{"@anthropic-ai/sdk":">=0.39.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/deep-cover_0.2.3_1786339902978_0.016598578111000517","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @anatolykhelmer/deepcover"},"0.2.4":{"name":"@anatolykhelmer/deep-cover","version":"0.2.4","keywords":["coverage","testing","code-quality","agentic","jest","typescript","mutation-testing","assertion-quality"],"author":{"name":"Anatoly Khelmer","email":"anatoly.khelmer@gmail.com"},"license":"MIT","_id":"@anatolykhelmer/deep-cover@0.2.4","maintainers":[{"name":"anatolykhelmer","email":"anatoly.khelmer@gmail.com"}],"homepage":"https://github.com/anatolykhelmer/deepcover#readme","bugs":{"url":"https://github.com/anatolykhelmer/deepcover/issues"},"bin":{"deepcover":"dist/cli/index.js"},"dist":{"shasum":"9bb4ece89c224797d02d7c651905c64374c3a261","tarball":"https://registry.npmjs.org/@anatolykhelmer/deep-cover/-/deep-cover-0.2.4.tgz","fileCount":232,"integrity":"sha512-0Zdp/SEBtHKIwrOZz+p1RGW3Uy+G53pN4rpUvAGY4AXlCiuuyfzteXnoPk/DmVePepvHN48forPymOIPRYoUBA==","signatures":[{"sig":"MEUCIB7tj6pNcTzKSqQz2BIlUFJDR44fEa3AFlpJYIYv9Sw8AiEAz9NTgZe4VO4BqVcAW2UuNoLA7ZybCSymW1lh6kU29wA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":572077},"jest":{"preset":"ts-jest","testRegex":".*\\.spec\\.ts$","testEnvironment":"node","collectCoverageFrom":["src/**/*.ts","!src/**/*.spec.ts","!src/types/**"],"testPathIgnorePatterns":["/node_modules/","paradigm-e2e","/docs/"]},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./reporter":{"types":"./dist/reporter/index.d.ts","require":"./dist/reporter/index.js"}},"gitHead":"efbdcfd16858d52eae58939e2f76a626e7a1b3d8","scripts":{"test":"jest","build":"tsc","deepcover":"tsx src/cli/index.ts","test:watch":"jest --watch","prepublishOnly":"npm run build","test:paradigms":"jest --testPathPatterns=paradigm-unit","test:paradigms:e2e":"jest --config jest.e2e.config.js"},"_npmUser":{"name":"anatolykhelmer","email":"anatoly.khelmer@gmail.com"},"repository":{"url":"git+https://github.com/anatolykhelmer/deepcover.git","type":"git"},"_npmVersion":"11.17.0","description":"Agentic code coverage analyzer","directories":{},"_nodeVersion":"26.4.0","dependencies":{"zod":"^4.3.6","glob":"^13.0.6","ts-morph":"^27.0.2","commander":"^14.0.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.3.0","ts-jest":"^29.4.6","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^25.5.0"},"peerDependencies":{"@anthropic-ai/sdk":">=0.39.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/deep-cover_0.2.4_1786356494036_0.3587800757565165","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @anatolykhelmer/deepcover"},"0.3.4":{"name":"@anatolykhelmer/deep-cover","version":"0.3.4","keywords":["coverage","testing","code-quality","agentic","jest","typescript","mutation-testing","assertion-quality"],"author":{"name":"Anatoly Khelmer","email":"anatoly.khelmer@gmail.com"},"license":"MIT","_id":"@anatolykhelmer/deep-cover@0.3.4","maintainers":[{"name":"anatolykhelmer","email":"anatoly.khelmer@gmail.com"}],"homepage":"https://github.com/anatolykhelmer/deepcover#readme","bugs":{"url":"https://github.com/anatolykhelmer/deepcover/issues"},"bin":{"deepcover":"dist/cli/index.js"},"dist":{"shasum":"0f120dc04d1e4b1bcd8a0f3843fcab386f266525","tarball":"https://registry.npmjs.org/@anatolykhelmer/deep-cover/-/deep-cover-0.3.4.tgz","fileCount":272,"integrity":"sha512-+5z3B7yNQ1g3EhJP/1HggwEUUyRyVPHT1ylaVAl/F+JLLRaLQc9NmlrVnjn/Xf5u1A8FFDHEjCMEVXgNSr1bGA==","signatures":[{"sig":"MEQCIEUhXmEYN7Zl0PXhzdYZxrAAdepGmkIizsICtr1CoNKRAiAe1GtHSfXBK+/uKJa5H6y90kIYjysO2lHRZjyQR4RYvA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@anatolykhelmer%2fdeep-cover@0.3.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":615564},"jest":{"preset":"ts-jest","testRegex":".*\\.spec\\.ts$","testEnvironment":"node","collectCoverageFrom":["src/**/*.ts","!src/**/*.spec.ts","!src/types/**"],"testPathIgnorePatterns":["/node_modules/","paradigm-e2e","/docs/"]},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./reporter":{"types":"./dist/reporter/index.d.ts","require":"./dist/reporter/index.js"}},"gitHead":"7af0fb5ac78a64cb9a42822fb46a9a8595cb0bbe","scripts":{"test":"jest","build":"tsc","deepcover":"tsx src/cli/index.ts","test:watch":"jest --watch","prepublishOnly":"npm run build","test:paradigms":"jest --testPathPatterns=paradigm-unit","test:paradigms:e2e":"jest --config jest.e2e.config.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ff23e9bf-cfab-42b1-ad40-ae457454a035"}},"repository":{"url":"git+https://github.com/anatolykhelmer/deepcover.git","type":"git"},"_npmVersion":"12.0.2","description":"Agentic code coverage analyzer","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.3.6","glob":"^13.0.6","ts-morph":"^27.0.2","commander":"^14.0.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.3.0","ts-jest":"^29.4.6","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^25.5.0"},"peerDependencies":{"@anthropic-ai/sdk":">=0.39.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/deep-cover_0.3.4_1786696562210_0.9344405505142745","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @anatolykhelmer/deepcover"},"0.4.0":{"name":"@anatolykhelmer/deep-cover","version":"0.4.0","keywords":["coverage","testing","code-quality","agentic","jest","typescript","mutation-testing","assertion-quality"],"author":{"name":"Anatoly Khelmer","email":"anatoly.khelmer@gmail.com"},"license":"MIT","_id":"@anatolykhelmer/deep-cover@0.4.0","maintainers":[{"name":"anatolykhelmer","email":"anatoly.khelmer@gmail.com"}],"homepage":"https://github.com/anatolykhelmer/deepcover#readme","bugs":{"url":"https://github.com/anatolykhelmer/deepcover/issues"},"bin":{"deepcover":"dist/cli/index.js"},"dist":{"shasum":"b6b8f5dc6d28ae8bf3a5a35e9dc6403a45b04a91","tarball":"https://registry.npmjs.org/@anatolykhelmer/deep-cover/-/deep-cover-0.4.0.tgz","fileCount":272,"integrity":"sha512-m74ham+iKWj3JrN0SlmvOcVy167Jpx3aWUPRqHxV1UPT6F6ks2O4Z1Ltjg4wdK0aW8WubZa8lSIJL/b6Qfd05Q==","signatures":[{"sig":"MEUCIQDc0MQQhnw/yf+0rAa7ymPGJY8Dn4Ay1AFVH5dCW8+gqwIgAeMJXgoym26QWCgI/xlwATifhn9eEN9CwNLRejqaluU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@anatolykhelmer%2fdeep-cover@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":638411},"jest":{"preset":"ts-jest","testRegex":".*\\.spec\\.ts$","testEnvironment":"node","collectCoverageFrom":["src/**/*.ts","!src/**/*.spec.ts","!src/types/**"],"testPathIgnorePatterns":["/node_modules/","paradigm-e2e","/docs/"]},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./reporter":{"types":"./dist/reporter/index.d.ts","require":"./dist/reporter/index.js"}},"gitHead":"9aefe4f50c8f2ce659e657c537641a2127946251","scripts":{"test":"jest","build":"tsc","deepcover":"tsx src/cli/index.ts","test:watch":"jest --watch","prepublishOnly":"npm run build","test:paradigms":"jest --testPathPatterns=paradigm-unit","test:paradigms:e2e":"jest --config jest.e2e.config.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ff23e9bf-cfab-42b1-ad40-ae457454a035"}},"repository":{"url":"git+https://github.com/anatolykhelmer/deepcover.git","type":"git"},"_npmVersion":"12.0.2","description":"Agentic code coverage analyzer","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.3.6","glob":"^13.0.6","ts-morph":"^27.0.2","commander":"^14.0.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.3.0","ts-jest":"^29.4.6","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^25.5.0"},"peerDependencies":{"@anthropic-ai/sdk":">=0.39.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/deep-cover_0.4.0_1786717498958_0.6326318615244098","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @anatolykhelmer/deepcover"},"0.5.0":{"name":"@anatolykhelmer/deep-cover","version":"0.5.0","keywords":["coverage","testing","code-quality","agentic","jest","typescript","mutation-testing","assertion-quality"],"author":{"name":"Anatoly Khelmer","email":"anatoly.khelmer@gmail.com"},"license":"MIT","_id":"@anatolykhelmer/deep-cover@0.5.0","maintainers":[{"name":"anatolykhelmer","email":"anatoly.khelmer@gmail.com"}],"homepage":"https://github.com/anatolykhelmer/deepcover#readme","bugs":{"url":"https://github.com/anatolykhelmer/deepcover/issues"},"bin":{"deepcover":"dist/cli/index.js"},"dist":{"shasum":"cf3dbfdefed4bafe854c5f899e294b969f3d7d0d","tarball":"https://registry.npmjs.org/@anatolykhelmer/deep-cover/-/deep-cover-0.5.0.tgz","fileCount":276,"integrity":"sha512-eaOq/Vtob9XDgITT0q6mxi6WZpD7CVkq3nyOeiQxE1Wb6pUbcIUIldYuwHQ7k62dW9ssqsLWjn7oZ7PAkTls7g==","signatures":[{"sig":"MEUCICbPr8/cCuBdBsgKpxtInt24YkosP9MJ9bwA1abeJM2lAiEAnFx8wn7t3UXXC23ElsXKw5k4PwrO5iZUwOPLdyvenug=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@anatolykhelmer%2fdeep-cover@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":648059},"jest":{"preset":"ts-jest","testRegex":".*\\.spec\\.ts$","testEnvironment":"node","collectCoverageFrom":["src/**/*.ts","!src/**/*.spec.ts","!src/types/**"],"testPathIgnorePatterns":["/node_modules/","paradigm-e2e","/docs/"]},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./reporter":{"types":"./dist/reporter/index.d.ts","require":"./dist/reporter/index.js"}},"gitHead":"1461d64cc0cfa8007bca2133a9832d39ec863cf4","scripts":{"test":"jest","build":"tsc","deepcover":"tsx src/cli/index.ts","test:watch":"jest --watch","prepublishOnly":"npm run build","test:paradigms":"jest --testPathPatterns=paradigm-unit","test:paradigms:e2e":"jest --config jest.e2e.config.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ff23e9bf-cfab-42b1-ad40-ae457454a035"}},"repository":{"url":"git+https://github.com/anatolykhelmer/deepcover.git","type":"git"},"_npmVersion":"12.0.2","description":"Agentic code coverage analyzer","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.3.6","glob":"^13.0.6","ts-morph":"^27.0.2","commander":"^14.0.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.3.0","ts-jest":"^29.4.6","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^25.5.0"},"peerDependencies":{"@anthropic-ai/sdk":">=0.39.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/deep-cover_0.5.0_1786898951842_0.487494509588408","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @anatolykhelmer/deepcover"},"0.6.0":{"name":"@anatolykhelmer/deep-cover","version":"0.6.0","keywords":["coverage","testing","code-quality","agentic","jest","typescript","mutation-testing","assertion-quality"],"author":{"name":"Anatoly Khelmer","email":"anatoly.khelmer@gmail.com"},"license":"MIT","_id":"@anatolykhelmer/deep-cover@0.6.0","maintainers":[{"name":"anatolykhelmer","email":"anatoly.khelmer@gmail.com"}],"homepage":"https://github.com/anatolykhelmer/deepcover#readme","bugs":{"url":"https://github.com/anatolykhelmer/deepcover/issues"},"bin":{"deepcover":"dist/cli/index.js"},"dist":{"shasum":"3412dc5bb99603f1ec1c2dce697262dafea4cf19","tarball":"https://registry.npmjs.org/@anatolykhelmer/deep-cover/-/deep-cover-0.6.0.tgz","fileCount":280,"integrity":"sha512-1T9vXoFxZsQBt+Jln9nLV7TyuFEpW0RwT2Ow+Sq46Difa2Y5RdRzwR7x6sEYkJgVxt50a8v/xXfdWRGG85Zocw==","signatures":[{"sig":"MEUCIHFn4TVo5b3zHEPL2aJKgvXc7DiHp/TUs20R9orJ4K0VAiEA7FPYiJtcr55vc97zZVEP5tvqO0owGTQWiqLvs31iJjU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@anatolykhelmer%2fdeep-cover@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":669113},"jest":{"preset":"ts-jest","testRegex":".*\\.spec\\.ts$","testEnvironment":"node","collectCoverageFrom":["src/**/*.ts","!src/**/*.spec.ts","!src/types/**"],"testPathIgnorePatterns":["/node_modules/","paradigm-e2e","/docs/"]},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./reporter":{"types":"./dist/reporter/index.d.ts","require":"./dist/reporter/index.js"}},"gitHead":"03339c9bb41d59c9ff43d1118e3bf2ab9c056181","scripts":{"test":"jest","build":"tsc","deepcover":"tsx src/cli/index.ts","test:watch":"jest --watch","prepublishOnly":"npm run build","test:paradigms":"jest --testPathPatterns=paradigm-unit","test:paradigms:e2e":"jest --config jest.e2e.config.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ff23e9bf-cfab-42b1-ad40-ae457454a035"}},"repository":{"url":"git+https://github.com/anatolykhelmer/deepcover.git","type":"git"},"_npmVersion":"12.0.2","description":"Agentic code coverage analyzer","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.3.6","glob":"^13.0.6","ts-morph":"^27.0.2","commander":"^14.0.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.3.0","ts-jest":"^29.4.6","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^25.5.0"},"peerDependencies":{"@anthropic-ai/sdk":">=0.39.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/deep-cover_0.6.0_1787240746444_0.6226819646246291","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @anatolykhelmer/deepcover"},"0.6.1":{"name":"@anatolykhelmer/deep-cover","version":"0.6.1","keywords":["coverage","testing","code-quality","agentic","jest","typescript","mutation-testing","assertion-quality"],"author":{"name":"Anatoly Khelmer","email":"anatoly.khelmer@gmail.com"},"license":"MIT","_id":"@anatolykhelmer/deep-cover@0.6.1","maintainers":[{"name":"anatolykhelmer","email":"anatoly.khelmer@gmail.com"}],"homepage":"https://github.com/anatolykhelmer/deepcover#readme","bugs":{"url":"https://github.com/anatolykhelmer/deepcover/issues"},"bin":{"deepcover":"dist/cli/index.js"},"dist":{"shasum":"98b67c2b64d8aaaee4c7c4b3be04113f7fe7fd21","tarball":"https://registry.npmjs.org/@anatolykhelmer/deep-cover/-/deep-cover-0.6.1.tgz","fileCount":288,"integrity":"sha512-i//4dSlLh9rYhrNJiwIJts52eTwhzNepg+b7bcx08TIo0x6AWSS4B3vzTxv7sN11nq3qlsxmRaRJOqqYTXb8pQ==","signatures":[{"sig":"MEUCIQDY5/USf6D9chC6FAAyfnBi0qrjIVTQXIqzx5+qytksbwIgUQoLe7kXH6g5k47DWLhcnnI3wpCF3fmhnZPMMj2wlmo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@anatolykhelmer%2fdeep-cover@0.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":662330},"jest":{"preset":"ts-jest","testRegex":".*\\.spec\\.ts$","testEnvironment":"node","collectCoverageFrom":["src/**/*.ts","!src/**/*.spec.ts","!src/types/**"],"testPathIgnorePatterns":["/node_modules/","paradigm-e2e","/docs/","/.claude/"]},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./reporter":{"types":"./dist/reporter/index.d.ts","require":"./dist/reporter/index.js"}},"gitHead":"8a0f5212ada74d6d3667bb0021d491778f0a366c","scripts":{"test":"jest","build":"tsc","deepcover":"tsx src/cli/index.ts","test:watch":"jest --watch","prepublishOnly":"npm run build","test:paradigms":"jest --testPathPatterns=paradigm-unit","test:paradigms:e2e":"jest --config jest.e2e.config.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ff23e9bf-cfab-42b1-ad40-ae457454a035"}},"repository":{"url":"git+https://github.com/anatolykhelmer/deepcover.git","type":"git"},"_npmVersion":"12.0.2","description":"Agentic code coverage analyzer","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.3.6","glob":"^13.0.6","ts-morph":"^27.0.2","commander":"^14.0.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.3.0","ts-jest":"^29.4.6","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^25.5.0"},"peerDependencies":{"@anthropic-ai/sdk":">=0.39.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/deep-cover_0.6.1_1787471894123_0.18817922547135013","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @anatolykhelmer/deepcover"},"0.7.0":{"name":"@anatolykhelmer/deep-cover","version":"0.7.0","keywords":["coverage","testing","code-quality","agentic","jest","typescript","mutation-testing","assertion-quality"],"author":{"name":"Anatoly Khelmer","email":"anatoly.khelmer@gmail.com"},"license":"MIT","_id":"@anatolykhelmer/deep-cover@0.7.0","maintainers":[{"name":"anatolykhelmer","email":"anatoly.khelmer@gmail.com"}],"homepage":"https://github.com/anatolykhelmer/deepcover#readme","bugs":{"url":"https://github.com/anatolykhelmer/deepcover/issues"},"bin":{"deepcover":"dist/cli/index.js"},"dist":{"shasum":"e3438879646d11a715ac7ae3b0cb9e613d2e3e8e","tarball":"https://registry.npmjs.org/@anatolykhelmer/deep-cover/-/deep-cover-0.7.0.tgz","fileCount":292,"integrity":"sha512-2hOP7fzMUpUii4U+2ZUCfESjgfq1Un6pSwgNk027nt+siwKCuM2p0jw4Z53ifYja9eNmpR77EbmaMbkvgGeGtA==","signatures":[{"sig":"MEQCIEEUN/cbza1U3X64tOp1pCLMvr6P5Ul96R3U99EmWc1CAiAlYCEOuZfHPyxz9oVAONDa+37cS+aGM10ODKXFXc85eA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@anatolykhelmer%2fdeep-cover@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":676974},"jest":{"preset":"ts-jest","testRegex":".*\\.spec\\.ts$","testEnvironment":"node","collectCoverageFrom":["src/**/*.ts","!src/**/*.spec.ts","!src/types/**"],"testPathIgnorePatterns":["/node_modules/","paradigm-e2e","/docs/","/.claude/"]},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./reporter":{"types":"./dist/reporter/index.d.ts","require":"./dist/reporter/index.js"}},"gitHead":"e594df6b4871b9972aa55a99ff1291b80d76baeb","scripts":{"test":"jest","build":"tsc","deepcover":"tsx src/cli/index.ts","test:watch":"jest --watch","prepublishOnly":"npm run build","test:paradigms":"jest --testPathPatterns=paradigm-unit","test:paradigms:e2e":"jest --config jest.e2e.config.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ff23e9bf-cfab-42b1-ad40-ae457454a035"}},"repository":{"url":"git+https://github.com/anatolykhelmer/deepcover.git","type":"git"},"_npmVersion":"12.0.2","description":"Agentic code coverage analyzer","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.3.6","glob":"^13.0.6","ts-morph":"^27.0.2","commander":"^14.0.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.3.0","ts-jest":"^29.4.6","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^25.5.0"},"peerDependencies":{"@anthropic-ai/sdk":">=0.39.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/deep-cover_0.7.0_1787730252584_0.5117108485353603","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @anatolykhelmer/deepcover"},"0.8.0":{"name":"@anatolykhelmer/deep-cover","version":"0.8.0","keywords":["coverage","testing","code-quality","agentic","jest","typescript","mutation-testing","assertion-quality"],"author":{"name":"Anatoly Khelmer","email":"anatoly.khelmer@gmail.com"},"license":"MIT","_id":"@anatolykhelmer/deep-cover@0.8.0","maintainers":[{"name":"anatolykhelmer","email":"anatoly.khelmer@gmail.com"}],"homepage":"https://github.com/anatolykhelmer/deepcover#readme","bugs":{"url":"https://github.com/anatolykhelmer/deepcover/issues"},"bin":{"deepcover":"dist/cli/index.js"},"dist":{"shasum":"be3ad55be1b54d435c25b9859136682369359553","tarball":"https://registry.npmjs.org/@anatolykhelmer/deep-cover/-/deep-cover-0.8.0.tgz","fileCount":296,"integrity":"sha512-53jNvjMQqKEl/r2PuOyum5piRZ2t89IwOQus95b1y7cJWjpAkKXQeDNkVH14gyElRIOQcmLGOL1aJFcRJWrZ1Q==","signatures":[{"sig":"MEQCIHH+s7bnmeVNDPcvR1txjtEgZAXyhCkCw0oHcuVs2UVBAiBU43DjC+nrSst1IM8CxwcioVONGHPu83mCAqi9ya08Xw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@anatolykhelmer%2fdeep-cover@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":679831},"jest":{"preset":"ts-jest","testRegex":".*\\.spec\\.ts$","testEnvironment":"node","collectCoverageFrom":["src/**/*.ts","!src/**/*.spec.ts","!src/types/**"],"testPathIgnorePatterns":["/node_modules/","paradigm-e2e","/docs/","/.claude/"]},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./reporter":{"types":"./dist/reporter/index.d.ts","require":"./dist/reporter/index.js"}},"gitHead":"c2dc3e0e4f8670ef804d781ad7d095624d2702d0","scripts":{"test":"jest","build":"tsc","deepcover":"tsx src/cli/index.ts","test:watch":"jest --watch","prepublishOnly":"npm run build","test:paradigms":"jest --testPathPatterns=paradigm-unit","test:paradigms:e2e":"jest --config jest.e2e.config.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ff23e9bf-cfab-42b1-ad40-ae457454a035"}},"repository":{"url":"git+https://github.com/anatolykhelmer/deepcover.git","type":"git"},"_npmVersion":"12.0.2","description":"Agentic code coverage analyzer","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.3.6","glob":"^13.0.6","ts-morph":"^27.0.2","commander":"^14.0.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.3.0","ts-jest":"^29.4.6","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^25.5.0"},"peerDependencies":{"@anthropic-ai/sdk":">=0.39.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/deep-cover_0.8.0_1787840002399_0.5170352862463552","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @anatolykhelmer/deepcover"},"0.9.0":{"name":"@anatolykhelmer/deep-cover","version":"0.9.0","keywords":["coverage","testing","code-quality","agentic","jest","typescript","mutation-testing","assertion-quality"],"author":{"name":"Anatoly Khelmer","email":"anatoly.khelmer@gmail.com"},"license":"MIT","_id":"@anatolykhelmer/deep-cover@0.9.0","maintainers":[{"name":"anatolykhelmer","email":"anatoly.khelmer@gmail.com"}],"homepage":"https://github.com/anatolykhelmer/deepcover#readme","bugs":{"url":"https://github.com/anatolykhelmer/deepcover/issues"},"bin":{"deepcover":"dist/cli/index.js"},"dist":{"shasum":"b4d4e1c9fefef731e713dd4acf65754cbfde12e1","tarball":"https://registry.npmjs.org/@anatolykhelmer/deep-cover/-/deep-cover-0.9.0.tgz","fileCount":308,"integrity":"sha512-gzAlEfUSMAtVBdioKhc/eJ4a/GZHn4SFDjuSP5I0YGD/yLXJSlyuJf0iatmF0ZG8RiX1iqOPE4/wqmfKeCgSQQ==","signatures":[{"sig":"MEUCICLgHQTmTSB3FzY0vBLr9ceFPYGjetm1xIhuJfBu0fNUAiEAq1KRnj5aaWgAX7TKHOY6fgsSp47nRHw9Qvpk1j/37iY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@anatolykhelmer%2fdeep-cover@0.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":712546},"jest":{"preset":"ts-jest","testRegex":".*\\.spec\\.ts$","testEnvironment":"node","collectCoverageFrom":["src/**/*.ts","!src/**/*.spec.ts","!src/types/**"],"testPathIgnorePatterns":["/node_modules/","paradigm-e2e","/docs/","/.claude/"]},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","require":"./dist/index.js"},"./reporter":{"types":"./dist/reporter/index.d.ts","default":"./dist/reporter/index.js","require":"./dist/reporter/index.js"},"./reporter/vitest":{"types":"./dist/reporter/vitest.d.ts","default":"./dist/reporter/vitest.js","require":"./dist/reporter/vitest.js"}},"gitHead":"6c8075b01ffce0030f3da4c27e3c95b26e42be93","scripts":{"test":"jest","build":"tsc","deepcover":"tsx src/cli/index.ts","test:watch":"jest --watch","prepublishOnly":"npm run build","test:paradigms":"jest --testPathPatterns=paradigm-unit","test:paradigms:e2e":"jest --config jest.e2e.config.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ff23e9bf-cfab-42b1-ad40-ae457454a035"}},"repository":{"url":"git+https://github.com/anatolykhelmer/deepcover.git","type":"git"},"_npmVersion":"12.0.2","description":"Agentic code coverage analyzer","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.3.6","glob":"^13.0.6","ts-morph":"^27.0.2","commander":"^14.0.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.3.0","vitest":"^4.1.11","ts-jest":"^29.4.6","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^25.5.0","@vitest/coverage-istanbul":"^4.1.11"},"peerDependencies":{"@anthropic-ai/sdk":">=0.39.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/deep-cover_0.9.0_1788344913719_0.22476034533337064","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @anatolykhelmer/deepcover"},"0.10.0":{"name":"@anatolykhelmer/deep-cover","version":"0.10.0","keywords":["coverage","testing","code-quality","agentic","jest","typescript","mutation-testing","assertion-quality"],"author":{"name":"Anatoly Khelmer","email":"anatoly.khelmer@gmail.com"},"license":"MIT","_id":"@anatolykhelmer/deep-cover@0.10.0","maintainers":[{"name":"anatolykhelmer","email":"anatoly.khelmer@gmail.com"}],"homepage":"https://github.com/anatolykhelmer/deepcover#readme","bugs":{"url":"https://github.com/anatolykhelmer/deepcover/issues"},"bin":{"deepcover":"dist/cli/index.js"},"dist":{"shasum":"00d6334745ba08d8fec5fc7778a6bad8f3a743ff","tarball":"https://registry.npmjs.org/@anatolykhelmer/deep-cover/-/deep-cover-0.10.0.tgz","fileCount":308,"integrity":"sha512-lYspkELSWbqEgP6NJReOY0/qz5kRqVTBJb5fsxfsF9ZcjE0LNJZqUimPQDZf04XxIJ4pWP5aa2VVzAGlrIdQXQ==","signatures":[{"sig":"MEUCIQDvk1tXVG8gQNgDnjVUVvBwGWvcPEe/QMhchE9MM0Sy8QIgSq0hcGOFngjzqlbXDt4KM4SNrXWnEecK4GuZMuOFAQM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@anatolykhelmer%2fdeep-cover@0.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":732486},"jest":{"preset":"ts-jest","testRegex":".*\\.spec\\.ts$","testEnvironment":"node","collectCoverageFrom":["src/**/*.ts","!src/**/*.spec.ts","!src/types/**"],"testPathIgnorePatterns":["/node_modules/","paradigm-e2e","runtime-artifact-e2e","/docs/","/.claude/"]},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","require":"./dist/index.js"},"./reporter":{"types":"./dist/reporter/index.d.ts","default":"./dist/reporter/index.js","require":"./dist/reporter/index.js"},"./reporter/vitest":{"types":"./dist/reporter/vitest.d.ts","default":"./dist/reporter/vitest.js","require":"./dist/reporter/vitest.js"}},"gitHead":"9b5d4500545e294b6abb085e11dc1481c75270a9","scripts":{"test":"jest","build":"tsc","deepcover":"tsx src/cli/index.ts","test:watch":"jest --watch","prepublishOnly":"npm run build","test:paradigms":"jest --testPathPatterns=paradigm-unit","test:paradigms:e2e":"npm run build && jest --config jest.e2e.config.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ff23e9bf-cfab-42b1-ad40-ae457454a035"}},"repository":{"url":"git+https://github.com/anatolykhelmer/deepcover.git","type":"git"},"_npmVersion":"12.0.2","description":"Agentic code coverage analyzer","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.3.6","glob":"^13.0.6","ts-morph":"^27.0.2","commander":"^14.0.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.3.0","vitest":"^4.1.11","ts-jest":"^29.4.6","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^25.5.0","@vitest/coverage-istanbul":"^4.1.11"},"peerDependencies":{"@anthropic-ai/sdk":">=0.39.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/deep-cover_0.10.0_1788973559875_0.9012029205258933","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @anatolykhelmer/deepcover"},"0.10.1":{"name":"@anatolykhelmer/deep-cover","version":"0.10.1","keywords":["coverage","testing","code-quality","agentic","jest","vitest","typescript","mutation-testing","assertion-quality"],"author":{"name":"Anatoly Khelmer","email":"anatoly.khelmer@gmail.com"},"license":"MIT","_id":"@anatolykhelmer/deep-cover@0.10.1","maintainers":[{"name":"anatolykhelmer","email":"anatoly.khelmer@gmail.com"}],"homepage":"https://github.com/anatolykhelmer/deepcover#readme","bugs":{"url":"https://github.com/anatolykhelmer/deepcover/issues"},"bin":{"deepcover":"dist/cli/index.js"},"dist":{"shasum":"8b098089ee887a63a0ad7fb0fe509d7112cbb7ae","tarball":"https://registry.npmjs.org/@anatolykhelmer/deep-cover/-/deep-cover-0.10.1.tgz","fileCount":308,"integrity":"sha512-A+ztyXdyCx/9JTuKGwu79ACdklH2oGwa8MPbJSnnpAmhGy2cuMma2SdJxSa4BI5AeR03aK1FxjDOcV8HJq9Zzw==","signatures":[{"sig":"MEUCIQCMaeLhd0cWS5Nbu2/YWQ0VX4HP4YONf993FSRaMd8tVQIgBssJ88cRRV6exogflFG9GQ0P/KySr6HFQ7My5j6TcME=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@anatolykhelmer%2fdeep-cover@0.10.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":727337},"jest":{"preset":"ts-jest","testRegex":".*\\.spec\\.ts$","testEnvironment":"node","collectCoverageFrom":["src/**/*.ts","!src/**/*.spec.ts","!src/types/**"],"testPathIgnorePatterns":["/node_modules/","paradigm-e2e","runtime-artifact-e2e","/docs/","/.claude/"]},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","require":"./dist/index.js"},"./reporter":{"types":"./dist/reporter/index.d.ts","default":"./dist/reporter/index.js","require":"./dist/reporter/index.js"},"./reporter/vitest":{"types":"./dist/reporter/vitest.d.ts","default":"./dist/reporter/vitest.js","require":"./dist/reporter/vitest.js"}},"gitHead":"a8c00d1ee82605ae12c3cf8d7328f9bea53643ba","scripts":{"test":"jest","build":"tsc","deepcover":"tsx src/cli/index.ts","test:watch":"jest --watch","prepublishOnly":"npm run build","test:paradigms":"jest --testPathPatterns=paradigm-unit","test:paradigms:e2e":"npm run build && jest --config jest.e2e.config.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ff23e9bf-cfab-42b1-ad40-ae457454a035"}},"repository":{"url":"git+https://github.com/anatolykhelmer/deepcover.git","type":"git"},"_npmVersion":"12.0.2","description":"Agentic code coverage analyzer","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.3.6","glob":"^13.0.6","ts-morph":"^27.0.2","commander":"^14.0.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.3.0","vitest":"^4.1.11","ts-jest":"^29.4.6","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^25.5.0","@vitest/coverage-istanbul":"^4.1.11"},"peerDependencies":{"@anthropic-ai/sdk":">=0.39.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/deep-cover_0.10.1_1789463097478_0.7987978114362333","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @anatolykhelmer/deepcover"}},"time":{"created":"2026-08-06T10:57:18.964Z","modified":"2026-09-24T18:46:14.111Z","0.1.0":"2026-08-06T10:57:19.282Z","0.1.1":"2026-08-06T11:02:38.067Z","0.1.2":"2026-08-06T11:17:13.001Z","0.1.3":"2026-08-06T11:32:55.605Z","0.1.4":"2026-08-06T13:57:27.738Z","0.1.5":"2026-08-07T11:58:03.114Z","0.2.0":"2026-08-09T12:46:40.345Z","0.2.1":"2026-08-09T14:03:07.666Z","0.2.2":"2026-08-10T05:00:31.059Z","0.2.3":"2026-08-10T05:31:43.125Z","0.2.4":"2026-08-10T10:08:14.205Z","0.3.4":"2026-08-14T08:36:02.394Z","0.4.0":"2026-08-14T14:24:59.125Z","0.5.0":"2026-08-16T16:49:11.996Z","0.6.0":"2026-08-20T15:45:46.650Z","0.6.1":"2026-08-23T07:58:14.274Z","0.7.0":"2026-08-26T07:44:12.752Z","0.8.0":"2026-08-27T14:13:22.598Z","0.9.0":"2026-09-02T10:28:33.882Z","0.10.0":"2026-09-09T17:06:00.052Z","0.10.1":"2026-09-15T09:04:57.648Z"},"bugs":{"url":"https://github.com/anatolykhelmer/deepcover/issues"},"author":{"name":"Anatoly Khelmer","email":"anatoly.khelmer@gmail.com"},"license":"MIT","homepage":"https://github.com/anatolykhelmer/deepcover#readme","keywords":["coverage","testing","code-quality","agentic","jest","vitest","typescript","mutation-testing","assertion-quality"],"repository":{"url":"git+https://github.com/anatolykhelmer/deepcover.git","type":"git"},"description":"Agentic code coverage analyzer","maintainers":[{"name":"anatolykhelmer","email":"anatoly.khelmer@gmail.com"}],"readme":"# DeepCover\n\n[![npm](https://img.shields.io/npm/v/@anatolykhelmer/deep-cover.svg)](https://www.npmjs.com/package/@anatolykhelmer/deep-cover)\n[![CI](https://github.com/anatolykhelmer/deepcover/actions/workflows/ci.yml/badge.svg)](https://github.com/anatolykhelmer/deepcover/actions/workflows/ci.yml)\n[![Node](https://img.shields.io/node/v/@anatolykhelmer/deep-cover.svg)](https://www.npmjs.com/package/@anatolykhelmer/deep-cover)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n[![npm downloads](https://img.shields.io/npm/dm/@anatolykhelmer/deep-cover.svg)](https://www.npmjs.com/package/@anatolykhelmer/deep-cover)\n\nLine coverage tells you **what ran**. DeepCover tells you **what's actually protected**.\n\nAn agentic coverage analyzer for TypeScript projects tested with Jest or Vitest. Deterministic AST analysis plus bounded LLM reasoning (or your coding agent — no API key) produce a meaningful-coverage score: would these tests catch a real regression, or did they just execute a line?\n\n## Why Istanbul is not enough\n\n100% line coverage does not mean the tests are good:\n\n```typescript\nit('should create order', async () => {\n  const result = await service.createOrder(mockInput);\n  expect(result).toBeDefined(); // 100% line coverage, near-useless assertion\n});\n```\n\nIstanbul reports full coverage for `createOrder`. That test still passes if the method returns `null`, `{}`, or the wrong order.\n\n| Question | Jest / Istanbul | DeepCover |\n|----------|:---:|:---:|\n| Was this line executed? | Yes | — |\n| Was this branch hit? | Yes | — |\n| Is the assertion meaningful? | — | Yes |\n| Are all domain states tested? | — | Yes |\n| Would tests catch a mutation? | — | Yes |\n| Which untested code is riskiest? | — | Yes |\n| What's mocked vs. real? | — | Yes |\n| Dependency / transitive coverage? | — | Yes |\n\nIstanbul also cannot tell a *decisive* operand from one that was merely *evaluated*. A guard like `if (a || b || c)` can show full branch coverage when every test enters through `a`. DeepCover splits the chain and flags the operands you could delete with the suite still green.\n\nDeepCover does not replace Istanbul — it **merges** with it. When both are available, Istanbul answers \"did this run?\" and DeepCover answers \"is it protected?\"\n\n## Report\n\n![DeepCover report: composite 47/100, createOrder weakly tested, deleteOrder uncovered](docs/assets/demo-report.svg)\n\n```\nDeepCover Report\n════════════════\nComposite Score: 47/100\n\n  Assertion Quality   ██████░░░░  62\n  State Coverage      ████░░░░░░  38\n  Mutation Resilience ████░░░░░░  41\n  Criticality Weight  █████░░░░░  51\n\nPer-method breakdown:\n  ✅ OrderService.getOrders      72  (well-tested)\n  ⚠️  OrderService.createOrder    23  (critical, weak tests)\n  ❌ OrderService.deleteOrder      0  (no tests)\n\nTop gaps:\n  #1 HIGH  OrderService.deleteOrder — \"has no test coverage\"\n  #2 MED   OrderService.createOrder — \"only happy path tested\"\n```\n\nWith the [test-runner reporter](#test-runner-integration) and `--coverage`, the same report is grounded in real line/branch hits instead of static heuristics.\n\n## Quick start\n\n**Prerequisites:** Node.js >= 18, a TypeScript project tested with Jest or Vitest. The Vitest reporter works with Vitest 2+ (Vitest 4 itself needs Node >= 20). Jest-only projects stay on Node >= 18.\n\nNo API key:\n\n```bash\nnpx @anatolykhelmer/deep-cover run --root . --module src/your-module --no-llm\n```\n\nCI gating — fail if the score is below the threshold:\n\n```bash\nnpx @anatolykhelmer/deep-cover run --root . --module src/your-module \\\n  --no-llm --format score --min-score 60\n```\n\n**Recommended:** use your coding agent as the Reasoner, then merge with runtime coverage.\n\n```bash\nnpm install -g @anatolykhelmer/deep-cover\ndeepcover init --agent cursor    # or: --agent claude\n```\n\nIn Cursor Agent or Claude Code:\n\n> run deepcover on src/your-module\n\nThen [wire the reporter](#test-runner-integration) and run tests with `--coverage` before analyzing. Scores get sharply more accurate; without those artifacts, scoring falls back to static heuristics.\n\nDeepCover runs as three stages, always in this order, always through files in `<root>/.deepcover/`:\n\n| Stage | Command | Writes | LLM? |\n|---|---|---|---|\n| 1 | `deepcover extract --module <path>` | `code-model.json`, `prompts.json` | no |\n| 2 | `deepcover reason` | `reasoner-output.json` | yes — or a template for your agent |\n| 3 | `deepcover analyze` | nothing (prints the report) | no |\n\n`deepcover run` performs all three in one command. Stage 2 is the only stage that involves an LLM, and it always says which Reasoner it used.\n\nWalkthroughs: [Cursor](#install-for-cursor-recommended) · [Claude Code](#install-for-claude-code) · [Anthropic API](#install-for-anthropic) · [CLI](#cli) · [Scoring](#scoring-model) · [Configuration](#configuration) · [Test-runner integration](#test-runner-integration)\n\n## Architecture\n\nFour-phase pipeline:\n\n```\n                                    ┌─────────────────────┐\n                                    │      npm test       │\n                                    │    (Jest/Vitest)    │\n                                    └────────┬────────────┘\n                                             │\n                              ┌──────────────┼──────────────┐\n                              ▼              ▼              ▼\n                     runtime.json       istanbul-coverage  coverage-final\n                     (pass/fail/dur)    .json (Vitest only)  (runner default)\n                              │              │\nSource + Tests ──► [Extractor] ──► CodeModel  │\n                    (ts-morph)        │       │\n                                     ▼       ▼\n                               [Coverage Resolver]\n                                     │\n                                     ▼\n                              ResolvedCoverage\n                                     │\n                    ┌────────────────┼────────────────┐\n                    ▼                                  ▼\n              [Reasoner]                          [Scorer]\n              (LLM/Cursor)                      (4 sub-scores)\n                    │                                  ▼\n                    └──────────────────────────► ScoreResult\n```\n\n- **Extractor** — Deterministic AST analysis: classes, methods, branches, dependencies, assertions, mocks\n- **Coverage Resolver** — Merges static AST analysis with Jest/Vitest runtime and Istanbul coverage data into unified, class-qualified coverage\n- **Reasoner** — LLM semantic analysis with enriched prompts: domain states, assertion quality, criticality, transitive coverage\n- **Scorer** — Deterministic formula: 4 sub-scores, 3 of them with LLM influence capped by `reasoner.maxInfluence` (default ±20 points)\n\nWhat DeepCover adds on top of line coverage:\n\n- **Assertion strength** — `toBeDefined()` is weak, `toEqual(expected)` is strong, `toHaveBeenCalledWith(...)` verifies interactions.\n- **Branch semantics** — a hit branch is classified as a guard, error path, or retry condition, and the exact expressions go to the Reasoner.\n- **Compound conditions** — `if (a || b)` is four things to test, not one. The `untested-condition-operand` detector flags operands no test ever drives.\n- **Domain states** — business scenarios, error conditions, and edge cases from branch conditions and test names.\n- **Dependency graph** — Controller → Service → Gateway is traced as a path. Istanbul treats each file in isolation.\n- **Criticality ranking** — a public method with high complexity and external calls outranks a getter.\n- **Mock analysis** — detects tests that mock away the thing they claim to test.\n\n## Install for Cursor (recommended)\n\nDeepCover uses the Cursor agent as the Reasoner — no API key. The npm package and the Cursor skill are separate: installing the CLI does not install the skill.\n\n### 1. Install the CLI\n\n```bash\nnpm install -g @anatolykhelmer/deep-cover\n```\n\nOr without a global install:\n\n```bash\nnpx @anatolykhelmer/deep-cover --help\n```\n\n### 2. Install the Cursor skill (once)\n\n```bash\ndeepcover init --agent cursor\n# same as: deepcover init\n# → ~/.cursor/skills/deepcover/SKILL.md\n```\n\nShare with the team (commit the skill into the repo):\n\n```bash\ndeepcover init --agent cursor --project\n# → ./.cursor/skills/deepcover/SKILL.md\n```\n\n| | Personal (`deepcover init`) | Project (`--project`) |\n|---|---|---|\n| Where | `~/.cursor/skills/deepcover/` | `./.cursor/skills/deepcover/` |\n| Scope | All your projects | This repo only |\n| Share | No | Yes — commit and push |\n\n### 3. Run in Cursor Agent\n\nOpen the project in Cursor → **Agent** chat (not Ask) → ask:\n\n> run deepcover on src/your-module\n\nThe skill runs the equivalent of:\n\n```bash\nnpx deepcover extract --root <PROJECT_ROOT> --module <MODULE_PATH> --bugs\n# agent fills .deepcover/reasoner-output.json\nnpx deepcover analyze --root <PROJECT_ROOT> --bugs\n```\n\nYou do not need to fill JSON by hand — the agent does that step for you.\n\n**Check it worked:** after `deepcover init`, the skill file above should exist. If the agent ignores the skill, start a new Agent chat or reload Cursor so skills are picked up.\n\n## Install for Claude Code\n\nSame skill workflow as Cursor — Claude Code is the Reasoner (uses your Claude Code / Anthropic subscription). No separate `ANTHROPIC_API_KEY` for the agent path; do not set `reasoner.provider: 'anthropic'` unless you want the CLI to call the API itself.\n\n### 1. Install the CLI\n\n```bash\nnpm install -g @anatolykhelmer/deep-cover\n```\n\n### 2. Install the Claude Code skill (once)\n\n```bash\ndeepcover init --agent claude\n# → ~/.claude/skills/deepcover/SKILL.md\n```\n\nShare with the team:\n\n```bash\ndeepcover init --agent claude --project\n# → ./.claude/skills/deepcover/SKILL.md\n```\n\n| | Personal | Project (`--project`) |\n|---|---|---|\n| Where | `~/.claude/skills/deepcover/` | `./.claude/skills/deepcover/` |\n| Scope | All your projects | This repo only |\n| Share | No | Yes — commit and push |\n\n### 3. Run in Claude Code\n\nIn a Claude Code session on the project, ask:\n\n> run deepcover on src/your-module\n\nThe skill runs the equivalent of:\n\n```bash\nnpx deepcover extract --root <PROJECT_ROOT> --module <MODULE_PATH> --bugs\n# agent fills .deepcover/reasoner-output.json\nnpx deepcover analyze --root <PROJECT_ROOT> --bugs\n```\n\n**Check it worked:** the skill file above should exist. If Claude ignores it, restart Claude Code or run `/reload-skills`.\n\n## Install for Anthropic\n\nUse this when you want the CLI to call Anthropic directly (CI, headless, no Cursor/Claude Code agent). No agent skill needed.\n\n### 1. Install the peer dependency\n\nIn the project you analyze (or globally alongside the CLI):\n\n```bash\nnpm install @anthropic-ai/sdk\n```\n\nWithout the SDK, DeepCover prints a clear install error instead of failing at import time.\n\n### 2. Set the API key\n\nDeepCover reads `ANTHROPIC_API_KEY` from the environment (or `reasoner.apiKey` in config). It does **not** auto-load a `.env` file.\n\n```bash\nexport ANTHROPIC_API_KEY=sk-ant-...\n```\n\n### 3. Point config at Anthropic\n\nCreate or edit `deepcover.config.ts` in the project root:\n\n```typescript\nexport default {\n  reasoner: {\n    provider: 'anthropic',\n    model: 'claude-sonnet-4-20250514', // optional — this is the default\n    // apiKey: process.env.ANTHROPIC_API_KEY, // optional if the env var is set\n  },\n};\n```\n\n### 4. Run (do not pass `--no-llm`)\n\n```bash\nnpx deepcover run --root <PROJECT_ROOT> --module <MODULE_PATH> --bugs\n```\n\n`run` performs extract → reason (Anthropic Messages API) → analyze in one command.\n\n| | Cursor / Claude Code | Anthropic API |\n|---|---|---|\n| Skill / Agent | yes (`init --agent …`) | no |\n| API key | not needed for agent path | `ANTHROPIC_API_KEY` |\n| How to run | Agent: «run deepcover…» | `run` in the terminal |\n| `--no-llm` | skips LLM | skips LLM (no API calls) |\n\n## CLI\n\n### `deepcover run`\n\nOne-shot: extract, reason, and analyze in sequence. Equivalent to running the three stages below back to back.\n\n| Flag | Description | Default |\n|------|-------------|---------|\n| `--root <path>` | Project root directory | Current directory |\n| `--module <path>` | Module to analyze (relative to root) | — |\n| `--file <path>` | Single file to analyze | — |\n| `--output <dir>` | Artifact directory | `.deepcover` |\n| `--no-llm` | Skip the reason stage (deterministic only) | false |\n| `--format <fmt>` | Output: `terminal`, `json`, or `score` | `terminal` |\n| `--min-score <n>` | Exit `1` if the composite score is below this | `thresholds.composite` |\n| `--bug-threshold <n>` | Exit `1` if high-risk bugs >= n (requires `--bugs`) | — |\n| `--bugs` | Enable bug analysis across all three stages | off |\n\n### `deepcover extract`\n\nExtract the CodeModel and LLM prompts for Cursor-driven analysis.\n\n| Flag | Description | Default |\n|------|-------------|---------|\n| `--root <path>` | Project root directory | Current directory |\n| `--module <path>` | Module to analyze (relative to root) | — |\n| `--file <path>` | Single file to analyze | — |\n| `--output <dir>` | Artifact directory — see the note below | `<root>/.deepcover` |\n| `--bugs` | Include 5th bug-finding prompt + write deterministic `bug-signals.json` | off |\n\n**`--output` is for tooling that reads the artifacts itself.** `analyze` and\n`score` always read `<root>/.deepcover` and have no counterpart flag, so\nartifacts written elsewhere cannot be scored by DeepCover. (`reason` can be\npointed at a relocated model with `--code-model`, but it still writes and reads\nthe rest of `<root>/.deepcover`.) Omit `--output` for the normal\n`extract → reason → analyze` flow.\n\nProduces:\n- `code-model.json` — structured code model (classes, methods, branches, tests)\n- `prompts.json` — LLM prompts for the Cursor agent (4, or 5 with `--bugs`)\n- `reasoner-output.json` — empty template for the agent to fill\n- `bug-signals.json` — *(with `--bugs`)* deterministic bug detector signals\n\n### `deepcover reason`\n\nRun the LLM Reasoner via the configured provider and write `reasoner-output.json` (no scoring).\n\n| Flag | Description | Default |\n|------|-------------|---------|\n| `--root <path>` | Project root directory | Current directory |\n| `--module <path>` | Module to analyze (relative to root) | — |\n| `--file <path>` | Single file to analyze | — |\n| `--code-model <file>` | Existing CodeModel JSON (skips extract) | — |\n| `--output <file>` | Output path | `<root>/.deepcover/reasoner-output.json` |\n| `--bugs` | Include bug-finding (`bugFindings`) | off |\n\nStaged CI example:\n\n```bash\nnpx @anatolykhelmer/deep-cover extract --module src/orders\nnpx @anatolykhelmer/deep-cover reason  --module src/orders --bugs\nnpx @anatolykhelmer/deep-cover score   --min-score 60 --bugs\n```\n\n`--code-model .deepcover/code-model.json` can replace `--module` on `reason` if `extract` already ran.\n\n### `deepcover analyze`\n\nScore the artifacts already on disk in `.deepcover/` and produce a report. Does not extract\nor call an LLM — run `extract` (and `reason`, or fill `reasoner-output.json` yourself) first,\nor use `deepcover run` for one-shot.\n\n| Flag | Description | Default |\n|------|-------------|---------|\n| `--root <path>` | Project root directory | Current directory |\n| `--format <fmt>` | Output: `terminal`, `json`, or `score` | `terminal` |\n| `--min-score <n>` | Exit `1` if the composite score is below this | `thresholds.composite` |\n| `--bugs` | Enable bug-finding (detectors + optional reasoner bugs) | off |\n| `--bug-threshold <n>` | Exit `1` if high-risk bugs >= n (requires `--bugs`) | — |\n\n### `deepcover score`\n\nOutput only the composite score — alias for `analyze --format score`. Exits with code 1 if\nbelow threshold. Same requirement as `analyze`: it reads artifacts already in `.deepcover/`.\n\n| Flag | Description | Default |\n|------|-------------|---------|\n| `--root <path>` | Project root directory | Current directory |\n| `--min-score <n>` | Minimum passing score (0-100) | `thresholds.composite` |\n| `--bugs` | Enable bug-finding analysis | off |\n| `--bug-threshold <n>` | Exit `1` if high-risk bugs >= n (requires `--bugs`) | — |\n\n### `deepcover init`\n\nInstall the agent skill (Cursor or Claude Code) so the agent can run extract → reason → analyze.\n\n| Flag | Description | Default |\n|------|-------------|---------|\n| `--agent <name>` | Target agent: `cursor` or `claude` | `cursor` |\n| `--project` | Install into `./.<agent>/skills/deepcover/` (commit and share) | off |\n\n```bash\ndeepcover init --agent cursor              # ~/.cursor/skills/deepcover/\ndeepcover init --agent cursor --project    # ./.cursor/skills/deepcover/\ndeepcover init --agent claude              # ~/.claude/skills/deepcover/\ndeepcover init --agent claude --project    # ./.claude/skills/deepcover/\n```\n\nWalkthroughs: [Install for Cursor](#install-for-cursor-recommended) · [Install for Claude Code](#install-for-claude-code).\n\n## Scoring Model\n\nFour sub-scores combined with configurable weights:\n\n| Sub-score | Weight | What it measures |\n|-----------|--------|-----------------|\n| Assertion Quality | 30% | Are assertions meaningful? (strong > medium > weak matchers, relative to method complexity) |\n| State Coverage | 30% | Are all meaningful domain states tested? (purely reasoner-driven — business scenarios, error conditions, edge cases) |\n| Mutation Resilience | 25% | Would tests catch subtle code changes? (branch coverage + assertion specificity) |\n| Criticality Weighting | 15% | Is the important code tested? (blast radius + business criticality) |\n\nThe LLM's adjustment to each sub-score is capped by `reasoner.maxInfluence`\n(default `0.2`, i.e. ±20 points) and scaled by its confidence — except state\ncoverage, which the LLM never adjusts directly; its number comes from\nresolver-confirmed states, not a confidence-weighted nudge. Assertion quality\nand criticality weighting are, by how their formulas average per-judgment\ncontributions, naturally bounded well inside that cap in practice; only\nmutation resilience routinely reaches it. See\n[Configuration](#configuration) for the exact bound on each. Without LLM\n(`--no-llm`), you get the deterministic base scores only.\n\n**Smart weight redistribution:** When a sub-score doesn't apply (e.g. state coverage when the Reasoner has no discovered states), its weight is redistributed proportionally to the applicable sub-scores.\n\n**Per-method composite** uses three factors: Istanbul line coverage baseline (up to 30 pts), state score (up to 35 pts), and assertion score (up to 35 pts). Methods with 100% Istanbul line coverage get the full baseline even without direct test assertions.\n\n**Per-method domain states** come from two sources, unioned and deduplicated by state description:\n\n- the **static extractor**, which derives states from enums, union types and parameter guards and attaches them to every method they affect. A static state counts as tested when any method it affects is covered.\n- the **Reasoner**, whose `discoveredStates` are keyed by class and method. A reasoner state counts as tested when the Reasoner marked it tested *and* the resolver confirms the method is genuinely covered — a state inside a method no test reaches cannot have been exercised, whatever the model says.\n\nMost services have no type-level states at all, so without the reasoner join a method's state score is 0 and its composite cannot exceed 65 no matter how well tested it is.\n\n**Matcher strength** is one shared taxonomy (`src/scorer/matchers.ts`) used by every sub-score and by the per-method rollup:\n\n| Strength | Matchers | Why |\n|----------|----------|-----|\n| Strong | `toEqual`, `toStrictEqual`, `toBe`, `toMatchObject`, `toBeCloseTo`, `toThrow`, `toHaveBeenCalledWith`, `toHaveBeenLastCalledWith` | Pins a concrete expected value or call shape |\n| Medium | `toContain`, `toMatch`, `toHaveLength`, `toHaveBeenCalledTimes` | Pins a property of the value |\n| Weak | `toBeDefined`, `toBeTruthy`, `toBeFalsy`, `toBeNull` | Pins only that something was produced |\n\nThe `resolves`, `rejects` and `not` modifiers are unwrapped, so `await expect(p).resolves.toEqual(x)` classifies as `toEqual`.\n\n**Transitive assertion credit:** When an assertion targets a method call (e.g. `expect(user.getName()).toBe('Alice')`), the `getName` method gets credit even though the test targets `createUser`. This properly reflects how service-level tests transitively verify data-class methods.\n\n## Configuration\n\nCreate `deepcover.config.ts` in your project root:\n\n```typescript\nexport default {\n  // Which files to analyse. Omit to use the defaults shown.\n  include: ['**/*.ts'],\n  exclude: ['**/*.spec.ts', '**/*.test.ts', '**/node_modules/**'],\n  testPattern: ['**/*.spec.ts', '**/*.test.ts'],\n\n  reasoner: {\n    provider: 'cursor',       // 'cursor' | 'anthropic' | 'mock' | 'none'\n    // model: 'claude-sonnet-4-20250514',  // when provider is anthropic\n    // apiKey: process.env.ANTHROPIC_API_KEY,\n    maxInfluence: 0.2,        // caps how far the reasoner can move a score (see below)\n  },\n  weights: {\n    assertionQuality: 0.30,\n    stateCoverage: 0.30,\n    mutationResilience: 0.25,\n    criticalityWeighting: 0.15,\n  },\n  thresholds: {\n    composite: 60,\n  },\n};\n```\n\nAlso supports `.js` and `.json` config files.\n\n`include`, `exclude`, and `testPattern` are glob arrays deciding which files the\nextractor reads and which of them count as tests. Each replaces its default\nwholesale rather than extending it — narrowing `include` means narrowing it. A\n`--module` or `--file` flag overrides `include` for that invocation, the same\nflag-beats-config precedence the score threshold uses.\n\n`thresholds.composite` sets the project's default pass mark: `analyze`, `score`,\nand `run` exit `1` when the composite falls below it. A `--min-score` flag on the\ncommand line overrides it for that invocation. With neither set, no gate applies.\n\n`reasoner.maxInfluence` caps how far the reasoner may move **assertion quality**,\n**mutation resilience**, and **criticality weighting** — each sub-score's LLM\nadjustment is clamped to ±`maxInfluence` × 100 points. In practice that clamp is\nthe binding constraint only for mutation resilience: its adjustment scales with\nthe number of LLM-confirmed transitive coverage inferences and is one-sided (the\nreasoner can only raise it), so enough confirmations reach the cap at any\nconfigured value, including the default. Assertion quality and criticality\nweighting are each a mean of per-judgment contributions, which is\nmathematically bounded before any clamp runs — assertion quality within\nroughly ±10 points, criticality weighting asymmetrically within roughly\n-10 to +2 points (a confirmed-high-and-untested rating pulls it down by up\nto 10; a confirmed-low-and-covered rating pulls it up by at most 2). Their\ndefault ±20-point cap (`maxInfluence: 0.2`) is never actually reached\neither way — `maxInfluence` only visibly constrains assertion quality's or\ncriticality's downward moves once configured below roughly 0.1, and\ncriticality's upward moves below roughly 0.02. It does **not** govern state\ncoverage, which the LLM cannot move directly at all: when Istanbul branch\ndata is available, that score is capped at overall Istanbul branch coverage\n+ 10 points, tying LLM-discovered states to runtime evidence rather than to\na configurable budget; without Istanbul data, no such cap applies.\n\nThe four `weights` must sum to `1`. They are spent directly in the composite\nscore, so any other total pushes results off the 0–100 scale. Because the\ndefaults already sum to 1, overriding one weight means restating all four.\n\nThe config is validated when it loads, and an invalid config stops the run with\nexit code 1 before any work happens. Unknown keys are errors — if DeepCover\nrejects a key you expect to work, check it against the fields above. Deleting\nthe config file runs on the defaults shown here.\n\n**Anthropic:** set `reasoner.provider` to `'anthropic'` and provide a key. Full walkthrough: [Install for Anthropic](#install-for-anthropic).\n\n## Using with Cursor\n\nSetup: [Install for Cursor](#install-for-cursor-recommended) (Claude Code: [Install for Claude Code](#install-for-claude-code)). After that, in the agent say **\"run deepcover on my webhooks module\"** — the skill handles the rest.\n\n### How it works\n\n```\n┌─────────────┐     ┌──────────────┐     ┌─────────────┐\n│  CLI extract │────▶│ Cursor Agent │────▶│ CLI analyze  │\n│  (Phase 1)   │     │  (Phase 2)   │     │  (Phase 3)   │\n│  CodeModel   │     │  Reasoning   │     │  Final Score │\n└─────────────┘     └──────────────┘     └─────────────┘\n```\n\n1. **Extract** — CLI runs AST analysis, outputs CodeModel + prompts to `.deepcover/`\n2. **Reason** — Cursor agent reads the CodeModel, performs semantic analysis (domain states, assertion quality, criticality, transitive coverage), writes `reasoner-output.json`\n3. **Score** — CLI combines deterministic metrics with agent insights, produces the final report\n\n### Manual pipeline (without the skill)\n\n```bash\n# Step 1: Extract\nnpx @anatolykhelmer/deep-cover extract \\\n  --root . --module src/webhooks\n\n# Step 2: Cursor agent fills .deepcover/reasoner-output.json\n\n# Step 3: Score with insights\nnpx @anatolykhelmer/deep-cover analyze --root .\n```\n\n### Why Cursor over an API?\n\n- **Free** — uses your existing Cursor subscription, no Anthropic/OpenAI key needed\n- **Context-aware** — the agent already knows your codebase from the conversation\n- **Interactive** — you can ask follow-up questions about the analysis\n- **Better insights** — a warm agent with project context beats a cold API call\n\n## Project Structure\n\n```\nsrc/\n├── extractor/          # Phase 1: AST analysis (ts-morph)\n│   ├── class-analyzer  # Classes, decorators, dependencies\n│   ├── method-analyzer # Branches, external calls, async ops, line ranges\n│   ├── test-analyzer   # Assertions, mocks, test-to-source mapping\n│   ├── dependency-graph# Dependency edges, transitive paths\n│   └── index           # Orchestrator → CodeModel\n├── resolver/           # Phase 1.5: Coverage resolution\n│   ├── types           # IstanbulCoverageData, ResolvedCoverage, MethodCoverage\n│   ├── istanbul-mapper # Maps Istanbul statement/branch data onto method line ranges\n│   ├── runtime-matcher # Matches Jest runtime test names to extractor TestNodes\n│   └── index           # resolveCoverage() — merges static + Istanbul + runtime\n├── reasoner/           # Phase 2: LLM semantic analysis\n│   ├── prompts/        # Enriched prompt templates (4 jobs with cross-cutting context)\n│   ├── providers/      # LLM adapters (mock, anthropic)\n│   ├── types           # Zod schemas for LLM output validation\n│   └── index           # Orchestrator → ReasonerOutput\n├── scorer/             # Phase 3: Scoring engine\n│   ├── assertion-quality, state-coverage, mutation-resilience, criticality\n│   ├── composer        # Weighted score composition\n│   ├── gap-generator   # Prioritized untested scenario list + partial coverage gaps\n│   └── index           # Orchestrator → ScoreResult\n├── reporter/           # Jest and Vitest reporters (runtime + Istanbul capture)\n├── cli/                # Commander CLI (analyze, score, extract)\n│   ├── commands/       # analyze, score, extract commands\n│   ├── formatters/     # Terminal report formatter\n│   └── config          # Config file loader\n└── types/              # Shared interfaces (CodeModel)\n\nfixtures/\n└── paradigms/          # Acceptance test fixtures (one per paradigm)\n    └── dont-test-getters-setters/  # Mini npm project with source, tests, expected.json\n```\n\n## Test-runner integration\n\nDeepCover works without this section — the Extractor can score a module from static AST analysis alone. But **configuring the reporter for your test runner and running tests with coverage is strongly recommended**: it's the difference between DeepCover *guessing* which test covers which method and *knowing*, from real Istanbul line/branch data and real pass/fail results. This directly sharpens Assertion Quality, State Coverage, Mutation Resilience, and Criticality (see \"How it works\" below). Do this once per project and every `analyze`/`score` run after that benefits automatically.\n\nBoth reporters write the same artifact, `.deepcover/runtime.json`. DeepCover's loaders still read the legacy `.deepcover/jest-runtime.json` name too, so **existing Jest users on the old reporter need to change nothing** — whichever of the two files has the newer mtime wins, so a stale `jest-runtime.json` left over from a Jest → Vitest migration can't shadow a fresh `runtime.json`. Neither reporter writes the old name anymore.\n\n### Jest\n\n#### Setup\n\nAdd the DeepCover reporter to your project's Jest config, **and** enable coverage — both are required, together:\n\n```json\n{\n  \"reporters\": [\"default\", \"@anatolykhelmer/deep-cover/reporter\"],\n  \"collectCoverage\": true\n}\n```\n\nIf you'd rather not turn on coverage by default, keep `collectCoverage` out of the config and always pass `--coverage` when running tests before a DeepCover analysis:\n\n```bash\nnpm test -- --coverage\nnpx @anatolykhelmer/deep-cover run --root . --module src/your-module\n```\n\n**Both pieces matter independently:**\n\n- Reporter only, no coverage → `runtime.json` is written (pass/fail, durations, assertion counts), but it records `coverageProvider: 'none'` and DeepCover falls back to heuristic line/branch estimates — no error, and no stale coverage from an earlier run is used.\n- Coverage only, no reporter → Jest still writes `coverage/coverage-final.json`, but DeepCover never sees runtime pass/fail data, and without `runtime.json` it does not know which directory to read the coverage from either.\n\nYou want both configured together to get the full accuracy benefit.\n\n#### What gets captured\n\nAfter each test run, the reporter writes to `.deepcover/`:\n\n| File | Contents |\n|------|----------|\n| `runtime.json` | Per-test pass/fail status, duration, assertion counts, and the coverage directory to read |\n\nIstanbul coverage itself is **not** copied into `.deepcover/` on Jest. Jest writes\n`coverage-final.json` from its own `CoverageReporter`, which core registers after every\ncustom reporter, so the DeepCover reporter never sees the current run's file — it is\nread in place instead, from the `coverageDirectory` recorded in `runtime.json`. (The\nVitest reporter does write a `istanbul-coverage.json` snapshot; Vitest exposes a hook\nthat fires once the report is on disk, and Jest has no equivalent.)\n\n#### How it works\n\n1. **Run tests** — `npm test -- --coverage` executes tests and produces both artifacts\n2. **Run DeepCover** — the `analyze` / `score` commands auto-detect `.deepcover/runtime.json` and read the runner's coverage from the directory it records\n3. **Coverage Resolver** merges the data:\n   - Istanbul data → ground-truth line/branch coverage per method (via line-range overlay)\n   - Runtime data → actual pass/fail, assertion counts, test durations\n   - Static extractor data → fallback when runtime data is unavailable\n4. **Scorer** uses the merged data for more accurate sub-scores:\n   - Assertion Quality filters out failed tests, detects runtime assertion count mismatches\n   - State Coverage scales by Istanbul branch coverage when available\n   - Mutation Resilience uses actual branch hit counts instead of heuristic estimates\n   - Criticality scales coverage proportionally by Istanbul line coverage\n   - Gap Generator reports \"partially covered\" methods (< 50% line/branch coverage)\n\n### Vitest\n\n**Vitest 2 and Vitest 3+.** The reporter implements both `onFinished` (the only hook Vitest 2.x fires) and `onTestRunEnd` (Vitest 3+). A Vitest 2 project that wired the reporter in 0.10.0 got a silent empty `.deepcover/` — no error — because 2.x never fires `onTestRunEnd`. Vitest 3 fires *both*, and the reporter keeps the richer `onTestRunEnd` data in that case; either way one `runtime.json` is written per run. Vitest 4 still requires Node >= 20; Vitest 2 runs on Node 18.\n\nOn Vitest 2 and 3 the reporter's best-effort `.deepcover/istanbul-coverage.json` snapshot is never taken — those versions dispatch `onFinishedReportCoverage` only to their own internal UI reporter — so DeepCover reads the live coverage directory recorded in `runtime.json` instead. Nothing is lost; the snapshot is only an optimisation (Vitest 4 custom reporters do get it).\n\nPer-operand (`binary-expr`) analysis is a separate question from the reporter: `@vitest/coverage-v8` 2.x does not emit it, and DeepCover disables that detector rather than guessing. `@vitest/coverage-v8` 4.x remaps through the AST and does emit it; Istanbul does on either runner.\n\n#### Setup\n\nInstall `@vitest/coverage-v8` as a devDependency — Vitest's `v8` provider is its\ndefault choice but is not bundled with Vitest itself, so coverage collection fails\nwithout it even though no `provider` is named in the config below:\n\n```bash\nnpm install -D @vitest/coverage-v8\n```\n\nAdd the DeepCover reporter to your Vitest config, **and** enable coverage — both are required, together:\n\n```ts\nimport { defineConfig } from 'vitest/config';\nimport { DeepCoverVitestReporter } from '@anatolykhelmer/deep-cover/reporter/vitest';\n\nexport default defineConfig({\n  test: {\n    reporters: ['default', new DeepCoverVitestReporter()],\n    coverage: { reporter: ['json'] },\n  },\n});\n```\n\nNo `provider` is set above, so Vitest uses its default, `v8` — see below for why that default is no longer a downgrade.\n\nThen run tests with coverage before analyzing:\n\n```bash\nnpx vitest run --coverage\nnpx @anatolykhelmer/deep-cover run --root . --module src/your-module\n```\n\n**Vitest's default `v8` provider gets the full detector set on Vitest 4.** DeepCover decides whether per-operand (`binary-expr`) branch data is available by inspecting the coverage artifact itself, not by trusting the provider id: `@vitest/coverage-v8` on Vitest 4.x remaps its output through the AST and does emit `binary-expr` branches, so the \"operand never evaluated\" half of the `untested-condition-operand` detector runs on that default setup with no extra configuration. On Vitest 2 the v8 provider does not emit operand data — DeepCover disables that half rather than guessing. `@vitest/coverage-istanbul` still works if you'd rather use it on any Vitest version.\n\nThis is *not* true of every `v8`-labeled provider, which is why DeepCover checks the artifact instead of the id: Jest's own `--coverageProvider=v8` converts through `v8-to-istanbul`, which does not produce `binary-expr` branches, so operand detection there still needs Jest's default `babel` provider (i.e. running Jest without `--coverageProvider=v8`). When DeepCover does load an artifact with no operand data — a Vitest run with no compound conditions to remap, or a Jest `v8` run — the detector's operand half is **disabled, not empty**, and `analyze`/`score` say so explicitly in their output notes instead of silently reporting no findings.\n\n**Vitest runs carry no per-test assertion count.** Vitest's reporter API does not expose one, so the DeepCover reporter omits `assertionCount` for each test rather than writing `0` — a `0` would be read as \"this test's assertions were all discarded\" instead of \"not measured.\" Consequently, Assertion Quality falls back to the statically discovered assertion count for Vitest runs — the same path a Jest project takes when it hasn't wired up the reporter at all. This is not a Vitest shortcoming to fix; it is the correct, intentional degradation for data the runner genuinely doesn't expose.\n\n**If coverage isn't enabled**, the reporter still writes `runtime.json` (pass/fail, durations) but records `coverageProvider: 'none'` and skips its best-effort coverage snapshot — an honest artifact rather than a misleading one. Run with `--coverage` to get Istanbul (or V8) data as well.\n\n#### What gets captured\n\n| File | Contents |\n|------|----------|\n| `runtime.json` | Per-test pass/fail status and duration — no assertion counts (see above) |\n| `istanbul-coverage.json` | *(Vitest 4 + coverage enabled)* Best-effort snapshot; on Vitest 2/3 the CLI reads the live `coverage/` directory instead |\n\n## Paradigm Testing\n\nDeepCover includes acceptance tests that validate the quality of its analysis against known test-coverage paradigms. Each paradigm is a self-contained fixture project with expected qualitative outcomes.\n\n### Current paradigms\n\n| Paradigm | What it validates |\n|----------|------------------|\n| `dont-test-getters-setters` | A data class with getters/setters and private helpers should score 100 when all methods are exercised through a consuming service's tests |\n| `bug-unhandled-error` | A method with a try/catch should flag `unhandled-error-path` when only the happy path is tested |\n| `same-method-name-different-class` | Two unrelated classes declaring a same-named method must be scored independently — the untested one must not inherit the other's test credit |\n| `compound-guard-operand` | A guard built from four `||` operands that every test enters through the same one should flag `untested-condition-operand`, even though Istanbul reports the `binary-expr` fully covered |\n| `compound-guard-operand-covered` | The same guard with a test for the second operand must report nothing — the false-positive guard for that detector |\n\n### Running paradigm tests\n\n```bash\nnpm run test:paradigms       # Fast — uses pre-computed Istanbul data (~1s)\nnpm run test:paradigms:e2e   # Full — runs real Jest and Vitest in fixture projects (~15s)\n```\n\nFast paradigm tests are included in the default `npm test` run. E2E tests run separately.\n\n### Adding a new paradigm\n\n1. Create `fixtures/paradigms/<paradigm-name>/` with source, tests, `jest.config.js`, `vitest.config.ts`, `package.json`\n2. Run `npm test` in the fixture to generate `coverage/coverage-final.json`\n3. Copy to `.deepcover/coverage-final.json` and commit\n4. Write `expected.json` with qualitative assertions\n5. Both test levels pick it up automatically\n\n## Development\n\n```bash\nnpm test              # Unit + paradigm unit tests\nnpm run test:watch    # Watch mode\nnpm run test:paradigms:e2e  # E2E paradigm tests (real Jest and Vitest runs)\nnpm run build         # Compile TypeScript\n```\n\nSee [CONTRIBUTING.md](./CONTRIBUTING.md) for setup and PR expectations.\n\n## Tech Stack\n\n- **TypeScript** — strict mode\n- **ts-morph** — AST analysis\n- **Commander** — CLI framework\n- **Zod** — LLM response validation\n- **Jest + ts-jest** — testing\n- **@anthropic-ai/sdk** — optional peer dependency for Anthropic provider\n\n## Changelog\n\nRelease notes and migrations: [CHANGELOG.md](./CHANGELOG.md). Also on [GitHub Releases](https://github.com/anatolykhelmer/deepcover/releases).\n\n## License\n\n[MIT](./LICENSE)\n","readmeFilename":"README.md"}