{"_id":"@aquaori/deplens","_rev":"17-6da381fd12a4b20c3dc1d96d24565b12","name":"@aquaori/deplens","dist-tags":{"latest":"1.2.7"},"versions":{"1.0.0":{"name":"@aquaori/deplens","version":"1.0.0","keywords":["npm","pnpm","dependency","analysis","unused","dependencies"],"author":{"name":"Your Name"},"license":"MIT","_id":"@aquaori/deplens@1.0.0","maintainers":[{"name":"aquaori","email":"2432856811@qq.com"}],"bin":{"deplens":"dist/cli.js"},"dist":{"shasum":"19020f73a190b5c9a2566879507eb6c4201d333e","tarball":"https://registry.npmjs.org/@aquaori/deplens/-/deplens-1.0.0.tgz","fileCount":19,"integrity":"sha512-1V5f8huT0QV2dKbkVk5+EQpBOOX81mynHp64rjkisfWkRk8rY7ZycTHo77HSmEKebr3cXIhPlnoBKMzzRly1/Q==","signatures":[{"sig":"MEUCIDK/KV6slHPL8iu9cfAQqb+iv9/VSw4zDIluWlSUY0VdAiEAqYO9ayZm0Ps81fLSOf8/21ddDgv1ZmHG3/58mjYGJCg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":98972},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"088a927427d3b4dff79672ebe7bb55c3f5c7dbcd","scripts":{"dev":"npm run build && node dist/cli.js analyze","test":"jest","build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"aquaori","email":"2432856811@qq.com"},"_npmVersion":"10.9.3","description":"A precise dependency analysis tool for npm and pnpm projects","directories":{},"_nodeVersion":"22.20.0","dependencies":{"chalk":"^5.6.2","yargs":"^18.0.0","js-yaml":"^4.1.1","fast-glob":"^3.3.3","@babel/types":"^7.28.5","@types/yargs":"^17.0.34","@babel/parser":"^7.28.5","@babel/traverse":"^7.28.5","compare-versions":"^6.1.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","ts-jest":"^29.4.5","ts-node":"^10.9.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^20.19.25","@types/chalk":"^0.4.31"},"_npmOperationalInternal":{"tmp":"tmp/deplens_1.0.0_1763793654107_0.45554440889414183","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@aquaori/deplens","version":"1.0.1","keywords":["npm","pnpm","dependency","analysis","unused","dependencies"],"author":{"name":"Your Name"},"license":"MIT","_id":"@aquaori/deplens@1.0.1","maintainers":[{"name":"aquaori","email":"2432856811@qq.com"}],"bin":{"deplens":"dist/cli.js"},"dist":{"shasum":"4018512d65ef12c39c8e5dfd9af5028563326f81","tarball":"https://registry.npmjs.org/@aquaori/deplens/-/deplens-1.0.1.tgz","fileCount":19,"integrity":"sha512-miBU7/Qe+oMnY1KUbZYP2fODkdw8gKyOWchOQywtKGGl8xokgM/qNVLAnaZnzqVzbA10zlk6eOpscA6vW+2wLg==","signatures":[{"sig":"MEUCIQDY+OI4MUiITkmjGYoX1NCt1d4PWmsw8QKOAOxakXpw5gIgPaLKdU/dZ9g+WElQF4nkEza5+q46kCxmoxK6y/8Gc0Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":112395},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"3c0bba2f36a619a693e8b06f8dea45b70579256f","scripts":{"dev":"npm run build && node dist/cli.js analyze","test":"jest","build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"aquaori","email":"2432856811@qq.com"},"_npmVersion":"10.9.3","description":"A precise dependency analysis tool for npm and pnpm projects","directories":{},"_nodeVersion":"22.20.0","dependencies":{"chalk":"^5.6.2","yargs":"^18.0.0","terser":"5.44.1","js-yaml":"^4.1.1","fast-glob":"^3.3.3","@babel/types":"^7.28.5","@types/yargs":"^17.0.34","@babel/parser":"^7.28.5","@babel/traverse":"^7.28.5","compare-versions":"^6.1.1","@babel/preset-react":"^7.28.5","@babel/preset-typescript":"^7.28.5","@babel/plugin-syntax-top-level-await":"^7.14.5","@babel/plugin-syntax-import-assertions":"^7.27.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","ts-jest":"^29.4.5","ts-node":"^10.9.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^20.19.25","@types/chalk":"^0.4.31"},"_npmOperationalInternal":{"tmp":"tmp/deplens_1.0.1_1763889791396_0.13470210687368445","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@aquaori/deplens","version":"1.0.2","keywords":["npm","pnpm","dependency","analysis","unused","dependencies"],"author":{"name":"Your Name"},"license":"MIT","_id":"@aquaori/deplens@1.0.2","maintainers":[{"name":"aquaori","email":"2432856811@qq.com"}],"bin":{"deplens":"dist/cli.js"},"dist":{"shasum":"9cb93af7fecabde45c730dd0530e29ff961095fa","tarball":"https://registry.npmjs.org/@aquaori/deplens/-/deplens-1.0.2.tgz","fileCount":19,"integrity":"sha512-G+9ZjrIAVu6XqfAMdehG/7nB69Hxlstuf44O2J4Hz4XUEn1YL/Wl18Eal9Az/sWLMeZYJLyObSw1BWEG6Z+1nA==","signatures":[{"sig":"MEUCIBNXIG++w/Swd0vPxdPPX3gh4pOdZj9pLoJ24Sq7pe8zAiEAvF1Jm82nHWIlSp0Q3IBCIKbs5YpZIl30+OMz7jmCtYo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":113989},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"fb0ccb990c09eff8ebf35ac2b287c8a7a83617be","scripts":{"dev":"npm run build && node dist/cli.js analyze","test":"jest","build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"aquaori","email":"2432856811@qq.com"},"_npmVersion":"10.9.3","description":"A precise dependency analysis tool for npm and pnpm projects","directories":{},"_nodeVersion":"22.20.0","dependencies":{"chalk":"^5.6.2","yargs":"^18.0.0","terser":"5.44.1","js-yaml":"^4.1.1","fast-glob":"^3.3.3","@babel/types":"^7.28.5","@types/yargs":"^17.0.34","@babel/parser":"^7.28.5","@babel/traverse":"^7.28.5","compare-versions":"^6.1.1","@babel/preset-react":"^7.28.5","@babel/preset-typescript":"^7.28.5","@babel/plugin-syntax-top-level-await":"^7.14.5","@babel/plugin-syntax-import-assertions":"^7.27.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","ts-jest":"^29.4.5","ts-node":"^10.9.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^20.19.25","@types/chalk":"^0.4.31"},"_npmOperationalInternal":{"tmp":"tmp/deplens_1.0.2_1763893419089_0.41930492114332396","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@aquaori/deplens","version":"1.0.3","keywords":["npm","pnpm","dependency","analysis","unused","dependencies"],"author":{"name":"Your Name"},"license":"MIT","_id":"@aquaori/deplens@1.0.3","maintainers":[{"name":"aquaori","email":"2432856811@qq.com"}],"bin":{"deplens":"dist/cli.js"},"dist":{"shasum":"3e55dbd061cd12ff4693d69ac939d46fb91c145a","tarball":"https://registry.npmjs.org/@aquaori/deplens/-/deplens-1.0.3.tgz","fileCount":19,"integrity":"sha512-5MGS6wIFqRuGEYETQAJ9fN2qUFAKM3Hli9gIFh5qNjX9RoDqlPCIse2i/pSqiWA+Wqdb1whP9o0IcgiPM9O8WA==","signatures":[{"sig":"MEYCIQC/HxkkQ+La3wO+fnOXK7eGDUNn1zlDe9yB9V854tKEAQIhAJohWC0rQPkxKItAiqg4IgRauR+sz5c4XNEe6kZWVq+K","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":123929},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"7441dad6f7e2e0352ccb6e92cccc632463e6e0a6","scripts":{"dev":"npm run build && node dist/cli.js analyze","test":"jest","build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"aquaori","email":"2432856811@qq.com"},"_npmVersion":"10.9.3","description":"A precise dependency analysis tool for npm and pnpm projects","directories":{},"_nodeVersion":"22.20.0","dependencies":{"chalk":"^5.6.2","yargs":"^18.0.0","terser":"5.44.1","js-yaml":"^4.1.1","fast-glob":"^3.3.3","@babel/types":"^7.28.5","@types/yargs":"^17.0.34","@babel/parser":"^7.28.5","@babel/traverse":"^7.28.5","compare-versions":"^6.1.1","@babel/preset-react":"^7.28.5","@babel/preset-typescript":"^7.28.5","@babel/plugin-syntax-top-level-await":"^7.14.5","@babel/plugin-syntax-import-assertions":"^7.27.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","ts-jest":"^29.4.5","ts-node":"^10.9.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^20.19.25","@types/chalk":"^0.4.31"},"_npmOperationalInternal":{"tmp":"tmp/deplens_1.0.3_1764139470776_0.5221427485568979","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@aquaori/deplens","version":"1.0.6","keywords":["npm","pnpm","dependency","analysis","unused","dependencies"],"author":{"name":"Aquaori"},"license":"MIT","_id":"@aquaori/deplens@1.0.6","maintainers":[{"name":"aquaori","email":"2432856811@qq.com"}],"bin":{"deplens":"dist/cli.js"},"dist":{"shasum":"80f075d8e53f9ba2f2ffdfb5233de2f4b9625ed1","tarball":"https://registry.npmjs.org/@aquaori/deplens/-/deplens-1.0.6.tgz","fileCount":84,"integrity":"sha512-PSEI/JeM5rMwTEAGBUcMEWFxDuEPPfH5j9j1Duvf7E51EUWx75EuXMXA5cFb1g6w38E6pJTxlLQ8NtZFZfKejQ==","signatures":[{"sig":"MEUCIQCn4CoRVIXd2LNEuaBSTRzmfKqt7/w758GUYilCjMmHgQIgWoKjlho7gbC/R7CpQM0SWXMUZWJ/pal7egPFtZaDzjw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":299427},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"db788ca4ceb089efc1d46c909fcc6203fc4cd449","scripts":{"dev":"npm run build && node dist/cli.js analyze","test":"jest","build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"aquaori","email":"2432856811@qq.com"},"_npmVersion":"10.9.3","description":"A precise dependency analysis tool for npm and pnpm projects","directories":{},"_nodeVersion":"22.20.0","dependencies":{"chalk":"^5.6.2","yargs":"^18.0.0","terser":"5.44.1","js-yaml":"^4.1.1","signale":"^1.4.0","fast-glob":"^3.3.3","@babel/types":"^7.28.5","cli-progress":"^3.12.0","@babel/parser":"^7.28.5","@babel/traverse":"^7.28.5","compare-versions":"^6.1.1","@babel/preset-react":"^7.28.5","@babel/preset-typescript":"^7.28.5","@babel/plugin-syntax-top-level-await":"^7.14.5","@babel/plugin-syntax-import-assertions":"^7.27.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","ts-jest":"^29.4.5","ts-node":"^10.9.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^20.19.25","@types/chalk":"^0.4.31","@types/yargs":"^17.0.34","@types/js-yaml":"^4.0.9","@types/signale":"^1.4.7","@types/cli-progress":"^3.11.6"},"_npmOperationalInternal":{"tmp":"tmp/deplens_1.0.6_1764252156588_0.7274981114228904","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@aquaori/deplens","version":"1.0.8","keywords":["npm","pnpm","dependency","analysis","unused","dependencies"],"author":{"name":"Aquaori"},"license":"MIT","_id":"@aquaori/deplens@1.0.8","maintainers":[{"name":"aquaori","email":"2432856811@qq.com"}],"bin":{"deplens":"dist/cli.js"},"dist":{"shasum":"6eb3b92ef986abfc55dbbe13e3cb1b8a474605e9","tarball":"https://registry.npmjs.org/@aquaori/deplens/-/deplens-1.0.8.tgz","fileCount":84,"integrity":"sha512-wImO2vHl7l1GqmNxY1bdQw4VHIU/voBWtB6Io2jve4yupI+Bi0MQneOplPPnSnp6DShFIGPN6+RHsSMrk+ozRg==","signatures":[{"sig":"MEUCIQD9sPHojmcRZEyt9BOTykZHdRiubadtlgYDl7zRE1FsFQIgNxFL/WqBwWQk0S96I+jdLSXMKCuQF+oNBkEFTyU5qXs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":303907},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"f29ca2a9ef8010291830fcb37a089a393136e38d","scripts":{"dev":"npx tsx src/cli.ts check","test":"jest","build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"aquaori","email":"2432856811@qq.com"},"_npmVersion":"10.9.3","description":"A precise dependency analysis tool for npm and pnpm projects","directories":{},"_nodeVersion":"22.20.0","dependencies":{"chalk":"^5.6.2","yargs":"^18.0.0","terser":"5.44.1","js-yaml":"^4.1.1","signale":"^1.4.0","fast-glob":"^3.3.3","@babel/types":"^7.28.5","cli-progress":"^3.12.0","@babel/parser":"^7.28.5","@babel/traverse":"^7.28.5","compare-versions":"^6.1.1","@vue/compiler-sfc":"^3.5.29","@babel/preset-react":"^7.28.5","@babel/preset-typescript":"^7.28.5","@babel/plugin-syntax-top-level-await":"^7.14.5","@babel/plugin-syntax-import-assertions":"^7.27.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","ts-jest":"^29.4.5","ts-node":"^10.9.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^20.19.25","@types/chalk":"^0.4.31","@types/yargs":"^17.0.34","@types/js-yaml":"^4.0.9","@types/signale":"^1.4.7","@types/cli-progress":"^3.11.6"},"_npmOperationalInternal":{"tmp":"tmp/deplens_1.0.8_1772633041112_0.39212765210829414","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@aquaori/deplens","version":"1.1.0","keywords":["npm","pnpm","dependency","analysis","unused","dependencies"],"author":{"name":"Aquaori"},"license":"MIT","_id":"@aquaori/deplens@1.1.0","maintainers":[{"name":"aquaori","email":"2432856811@qq.com"}],"bin":{"deplens":"dist/cli.js"},"dist":{"shasum":"11a0bf94f85a57dc174810349232a43f2071cd66","tarball":"https://registry.npmjs.org/@aquaori/deplens/-/deplens-1.1.0.tgz","fileCount":94,"integrity":"sha512-ZghlQL+R8lm7+PiNxAT3tkMJ0lek5ewOmOIcfGPkotW4B4dASNwn2Yj/hma0uiimvvbSCeCFKXwc1o9XNU//nw==","signatures":[{"sig":"MEYCIQCxBKxcB5uiJdMSecDV+zFHjMQnKii3qRDZb+MjSS4FrwIhAPaVokM6lOZekcQbajNrmvytu00oueld3jlvQ1H5tLwp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":362268},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"ea60b84248d31fd9543cad0ccee0fe38f892df18","scripts":{"dev":"npx tsx src/cli.ts check","test":"jest","build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"aquaori","email":"2432856811@qq.com"},"_npmVersion":"11.11.1","description":"A precise dependency analysis tool for npm and pnpm projects","directories":{},"_nodeVersion":"22.20.0","dependencies":{"chalk":"^5.6.2","yargs":"^18.0.0","terser":"5.44.1","js-yaml":"^4.1.1","signale":"^1.4.0","fast-glob":"^3.3.3","@babel/types":"^7.28.5","cli-progress":"^3.12.0","@babel/parser":"^7.28.5","@babel/traverse":"^7.28.5","compare-versions":"^6.1.1","@vue/compiler-sfc":"^3.5.29","@babel/preset-react":"^7.28.5","@babel/preset-typescript":"^7.28.5","@babel/plugin-syntax-top-level-await":"^7.14.5","@babel/plugin-syntax-import-assertions":"^7.27.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","ts-jest":"^29.4.5","ts-node":"^10.9.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^20.19.25","@types/chalk":"^0.4.31","@types/yargs":"^17.0.34","@types/js-yaml":"^4.0.9","@types/signale":"^1.4.7","@types/cli-progress":"^3.11.6"},"_npmOperationalInternal":{"tmp":"tmp/deplens_1.1.0_1774078645282_0.5902579934638492","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@aquaori/deplens","version":"1.2.0","keywords":["npm","pnpm","dependency","analysis","unused","dependencies"],"author":{"name":"Aquaori"},"license":"MIT","_id":"@aquaori/deplens@1.2.0","maintainers":[{"name":"aquaori","email":"2432856811@qq.com"}],"bin":{"deplens":"dist/cli.js"},"dist":{"shasum":"a3a9d275e0cd93584ff6ebc5e0790082e29b0a50","tarball":"https://registry.npmjs.org/@aquaori/deplens/-/deplens-1.2.0.tgz","fileCount":153,"integrity":"sha512-ur8Fapwvngo94rih2wO+ieKCJlsNqE6scPUJpt3X5LDFVmHZsbMtQcg/mCunjtz8nyd3JmrQphZYsioJ5UNmAQ==","signatures":[{"sig":"MEQCIGlH9JE0R6acEX/xldKcnKrA15ZDjm7crOw7qMo58Kw/AiBxIL+d6qKpksfTHEKj0NxSydmgTteXIK//n2aXRcY0Cg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":845371},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"2adc726be0c993629e538b9f35bb2edb4ff23cab","scripts":{"dev":"npx tsx src/cli.ts check","test":"jest","build":"tsc","start":"node dist/index.js","review":"npm run build && node dist/cli.js review","review:src":"npx tsx src/cli.ts review"},"_npmUser":{"name":"aquaori","email":"2432856811@qq.com"},"_npmVersion":"11.11.1","description":"A precise dependency analysis tool for npm and pnpm projects","directories":{},"_nodeVersion":"22.20.0","dependencies":{"zod":"^4.3.6","chalk":"^5.6.2","yargs":"^18.0.0","dotenv":"^17.3.1","terser":"5.44.1","js-yaml":"^4.1.1","signale":"^1.4.0","fast-glob":"^3.3.3","langchain":"^1.2.35","@babel/types":"^7.28.5","cli-progress":"^3.12.0","@babel/parser":"^7.28.5","@babel/traverse":"^7.28.5","@langchain/core":"^1.1.34","compare-versions":"^6.1.1","@langchain/openai":"^1.3.0","@vue/compiler-sfc":"^3.5.29","@babel/preset-react":"^7.28.5","@babel/preset-typescript":"^7.28.5","@babel/plugin-syntax-top-level-await":"^7.14.5","@babel/plugin-syntax-import-assertions":"^7.27.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","ts-jest":"^29.4.5","ts-node":"^10.9.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^20.19.25","@types/chalk":"^0.4.31","@types/yargs":"^17.0.34","@types/js-yaml":"^4.0.9","@types/signale":"^1.4.7","@types/cli-progress":"^3.11.6"},"_npmOperationalInternal":{"tmp":"tmp/deplens_1.2.0_1774179587511_0.7117017752086372","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@aquaori/deplens","version":"1.2.1","keywords":["npm","pnpm","dependency","analysis","unused","dependencies"],"author":{"name":"Aquaori"},"license":"MIT","_id":"@aquaori/deplens@1.2.1","maintainers":[{"name":"aquaori","email":"2432856811@qq.com"}],"bin":{"deplens":"dist/cli.js"},"dist":{"shasum":"9bb981021e5b0a6db880d706cf91ce9f9aaaae85","tarball":"https://registry.npmjs.org/@aquaori/deplens/-/deplens-1.2.1.tgz","fileCount":153,"integrity":"sha512-hm0idNS6d3OEOrslpv6tqcKACIG0YXIi1qmikiHOY3SWAip4n8Qew2YUhz+ruRXgvavF2iGU1G0NU4wbw+HlnQ==","signatures":[{"sig":"MEUCIEi4ceRS/cwMe0wt8zlz9JXS+2KSTi0sbgxAZPbCdT7GAiEA4DkltoscbaH2sHA1tdynqBXt4VMvSplelwmBj+9fktY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":852401},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"3ac7db6698564491b63f4dbd10f0b80260a5d764","scripts":{"dev":"npx tsx src/cli.ts check","test":"jest","build":"tsc","start":"node dist/index.js","review":"npm run build && node dist/cli.js review","review:src":"npx tsx src/cli.ts review"},"_npmUser":{"name":"aquaori","email":"2432856811@qq.com"},"_npmVersion":"11.11.1","description":"A precise dependency analysis tool for npm and pnpm projects","directories":{},"_nodeVersion":"22.20.0","dependencies":{"zod":"^4.3.6","chalk":"^5.6.2","yargs":"^18.0.0","dotenv":"^17.3.1","terser":"5.44.1","js-yaml":"^4.1.1","signale":"^1.4.0","fast-glob":"^3.3.3","langchain":"^1.2.35","@babel/types":"^7.28.5","cli-progress":"^3.12.0","@babel/parser":"^7.28.5","@babel/traverse":"^7.28.5","@langchain/core":"^1.1.34","compare-versions":"^6.1.1","@langchain/openai":"^1.3.0","@vue/compiler-sfc":"^3.5.29","@babel/preset-react":"^7.28.5","@babel/preset-typescript":"^7.28.5","@babel/plugin-syntax-top-level-await":"^7.14.5","@babel/plugin-syntax-import-assertions":"^7.27.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","ts-jest":"^29.4.5","ts-node":"^10.9.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^20.19.25","@types/chalk":"^0.4.31","@types/yargs":"^17.0.34","@types/js-yaml":"^4.0.9","@types/signale":"^1.4.7","@types/cli-progress":"^3.11.6"},"_npmOperationalInternal":{"tmp":"tmp/deplens_1.2.1_1774180529632_0.33085757776992364","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@aquaori/deplens","version":"1.2.2","keywords":["npm","pnpm","dependency","analysis","unused","dependencies"],"author":{"name":"Aquaori"},"license":"MIT","_id":"@aquaori/deplens@1.2.2","maintainers":[{"name":"aquaori","email":"2432856811@qq.com"}],"bin":{"deplens":"dist/cli.js"},"dist":{"shasum":"c521d5a16445a561f8662dfdbd13ff1a6551d9a1","tarball":"https://registry.npmjs.org/@aquaori/deplens/-/deplens-1.2.2.tgz","fileCount":153,"integrity":"sha512-SEDUQQDFzxkIPYxx3NEgiWnte/jg/FjLeJyJ0lHu3jwoTm57qHReFl2lL/tHGfUclzM3lflgCvUG76eMmQeeDg==","signatures":[{"sig":"MEQCICjDr4KCzDKxlZSwx/QvkLR/51pOTkVh3awi6gqsVo0WAiAwQQmND9/yuMAgrKgt3U9bm2I4Nblr8pI4+VQNsgdFEw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":840023},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"e1c2ae7b80e6296f53bd9a5140b58e68b75eb24e","scripts":{"dev":"npx tsx src/cli.ts check","test":"jest","build":"tsc","start":"node dist/index.js","review":"npm run build && node dist/cli.js review","review:src":"npx tsx src/cli.ts review"},"_npmUser":{"name":"aquaori","email":"2432856811@qq.com"},"_npmVersion":"11.11.1","description":"A precise dependency analysis tool for npm and pnpm projects","directories":{},"_nodeVersion":"22.20.0","dependencies":{"zod":"^4.3.6","chalk":"^5.6.2","yargs":"^18.0.0","dotenv":"^17.3.1","terser":"5.44.1","js-yaml":"^4.1.1","signale":"^1.4.0","fast-glob":"^3.3.3","langchain":"^1.2.35","@babel/types":"^7.28.5","cli-progress":"^3.12.0","@babel/parser":"^7.28.5","@babel/traverse":"^7.28.5","@langchain/core":"^1.1.34","compare-versions":"^6.1.1","@langchain/openai":"^1.3.0","@vue/compiler-sfc":"^3.5.29","@babel/preset-react":"^7.28.5","@babel/preset-typescript":"^7.28.5","@babel/plugin-syntax-top-level-await":"^7.14.5","@babel/plugin-syntax-import-assertions":"^7.27.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","ts-jest":"^29.4.5","ts-node":"^10.9.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^20.19.25","@types/chalk":"^0.4.31","@types/yargs":"^17.0.34","@types/js-yaml":"^4.0.9","@types/signale":"^1.4.7","@types/cli-progress":"^3.11.6"},"_npmOperationalInternal":{"tmp":"tmp/deplens_1.2.2_1774775851913_0.777310055903808","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"@aquaori/deplens","version":"1.2.3","keywords":["npm","pnpm","dependency","analysis","unused","dependencies"],"author":{"name":"Aquaori"},"license":"MIT","_id":"@aquaori/deplens@1.2.3","maintainers":[{"name":"aquaori","email":"2432856811@qq.com"}],"bin":{"deplens":"dist/cli.js"},"dist":{"shasum":"d176ffd6b1be2501438f63be09305cf9585755d0","tarball":"https://registry.npmjs.org/@aquaori/deplens/-/deplens-1.2.3.tgz","fileCount":151,"integrity":"sha512-LPrn/voOgjll/LlowZMDmwnq2qlqXXA4xtnfHbcbMZaYIn+zMSPPYC2ibfoRRN7sEEtG8nWsEnQs8sFmj9VbOA==","signatures":[{"sig":"MEYCIQCwS+5bJNe9SK8H6HFjkbKf+3HkBZt9jbIeVfO5tqBNgQIhAOQwSG0f7dwMYe4Jr9xRaQ22f6knfrBfuxDSSuucykof","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":825193},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"8b47b732ea9c3ad8ebdfc6ff1496487cb5d25420","scripts":{"dev":"npx tsx src/cli.ts check","test":"jest","build":"tsc","start":"node dist/index.js","review":"npm run build && node dist/cli.js review","review:src":"npx tsx src/cli.ts review"},"_npmUser":{"name":"aquaori","email":"2432856811@qq.com"},"_npmVersion":"11.11.1","description":"A precise dependency analysis tool for npm and pnpm projects","directories":{},"_nodeVersion":"22.20.0","dependencies":{"zod":"^4.3.6","chalk":"^5.6.2","yargs":"^18.0.0","dotenv":"^17.3.1","terser":"5.44.1","js-yaml":"^4.1.1","signale":"^1.4.0","fast-glob":"^3.3.3","langchain":"^1.2.35","@babel/types":"^7.28.5","cli-progress":"^3.12.0","@babel/parser":"^7.28.5","@babel/traverse":"^7.28.5","@langchain/core":"^1.1.34","compare-versions":"^6.1.1","@langchain/openai":"^1.3.0","@vue/compiler-sfc":"^3.5.29","@babel/preset-react":"^7.28.5","@babel/preset-typescript":"^7.28.5","@babel/plugin-syntax-top-level-await":"^7.14.5","@babel/plugin-syntax-import-assertions":"^7.27.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","ts-jest":"^29.4.5","ts-node":"^10.9.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^20.19.25","@types/chalk":"^0.4.31","@types/yargs":"^17.0.34","@types/js-yaml":"^4.0.9","@types/signale":"^1.4.7","@types/cli-progress":"^3.11.6"},"_npmOperationalInternal":{"tmp":"tmp/deplens_1.2.3_1774777569951_0.4534238587547672","host":"s3://npm-registry-packages-npm-production"}},"1.2.4":{"name":"@aquaori/deplens","version":"1.2.4","keywords":["npm","pnpm","dependency","analysis","unused","dependencies"],"author":{"name":"Aquaori"},"license":"MIT","_id":"@aquaori/deplens@1.2.4","maintainers":[{"name":"aquaori","email":"2432856811@qq.com"}],"bin":{"deplens":"dist/cli.js"},"dist":{"shasum":"0d22c279e472274671dc226261b5e628731fcd22","tarball":"https://registry.npmjs.org/@aquaori/deplens/-/deplens-1.2.4.tgz","fileCount":156,"integrity":"sha512-utJYv95aoTN2Kw3B/M/Q9NfFomxIx6yQMvUS7XMnetcukrGClkefGsugCGsHJo4MUze6NvQKaCDfDXdntOlg8g==","signatures":[{"sig":"MEUCIQDqrJqxL0ia6E69ZLiu7qb7gk0E16cIc1T+2+bwpLxldwIgVSpc45kB+3GYuzhGGp/StPVXx+rhCTeyJhk7AKVK5R0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":861054},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"625c7bcde472f965a665d8b5933aa06ca5c5e00a","scripts":{"dev":"npx tsx src/cli.ts check","test":"jest","build":"tsc","start":"node dist/index.js","review":"npm run build && node dist/cli.js review","review:src":"npx tsx src/cli.ts review"},"_npmUser":{"name":"aquaori","email":"2432856811@qq.com"},"_npmVersion":"11.11.1","description":"A precise dependency analysis tool for npm and pnpm projects","directories":{},"_nodeVersion":"22.20.0","dependencies":{"zod":"^4.3.6","chalk":"^5.6.2","yargs":"^18.0.0","dotenv":"^17.3.1","terser":"5.44.1","js-yaml":"^4.1.1","signale":"^1.4.0","fast-glob":"^3.3.3","langchain":"^1.2.35","@babel/types":"^7.28.5","cli-progress":"^3.12.0","@babel/parser":"^7.28.5","@babel/traverse":"^7.28.5","@langchain/core":"^1.1.34","compare-versions":"^6.1.1","@langchain/openai":"^1.3.0","@vue/compiler-sfc":"^3.5.29","@babel/preset-react":"^7.28.5","@babel/preset-typescript":"^7.28.5","@babel/plugin-syntax-top-level-await":"^7.14.5","@babel/plugin-syntax-import-assertions":"^7.27.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","ts-jest":"^29.4.5","ts-node":"^10.9.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^20.19.25","@types/chalk":"^0.4.31","@types/yargs":"^17.0.34","@types/js-yaml":"^4.0.9","@types/signale":"^1.4.7","@types/cli-progress":"^3.11.6"},"_npmOperationalInternal":{"tmp":"tmp/deplens_1.2.4_1775899316393_0.8414258771642336","host":"s3://npm-registry-packages-npm-production"}},"1.2.5":{"name":"@aquaori/deplens","version":"1.2.5","keywords":["npm","pnpm","dependency","analysis","unused","dependencies"],"author":{"name":"Aquaori"},"license":"MIT","_id":"@aquaori/deplens@1.2.5","maintainers":[{"name":"aquaori","email":"2432856811@qq.com"}],"bin":{"deplens":"dist/cli.js"},"dist":{"shasum":"29c4e063824b42de213ded76142fe08d5116673f","tarball":"https://registry.npmjs.org/@aquaori/deplens/-/deplens-1.2.5.tgz","fileCount":242,"integrity":"sha512-EI4p9ym/d/wlxOQDgkn/0UfaYph1+NRtrQaAjUZHQ/TCoLvTv7laDSjj2WduOxhB4qedY9lZoXzl2ouGKKMMoQ==","signatures":[{"sig":"MEQCIFoHv72VmzbjAIQeyI0C8tly6+Kt66y8ySq2cGR5EVIUAiBReiY4/g/F7msNumfZ+6N04i04MongzrNFxu1aVnOvkw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1096524},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"aaa019ce52061ab002ecf9d6d8d61493394266ac","scripts":{"dev":"npx tsx src/cli.ts check","test":"jest","build":"tsc","start":"node dist/index.js","review":"npm run build && node dist/cli.js review","test:ci":"jest --runInBand","test:unit":"jest tests/unit","review:src":"npx tsx src/cli.ts review","dev:preReview":"npx tsx src/cli.ts check --preReview","test:coverage":"jest --coverage","test:integration":"jest tests/integration","review:src:preReview":"npx tsx src/cli.ts review --preReview"},"_npmUser":{"name":"aquaori","email":"2432856811@qq.com"},"_npmVersion":"11.11.1","description":"A precise dependency analysis tool for npm and pnpm projects","directories":{},"_nodeVersion":"24.15.0","dependencies":{"zod":"^4.3.6","chalk":"^5.6.2","yargs":"^18.0.0","dotenv":"^17.3.1","terser":"5.44.1","js-yaml":"^4.1.1","signale":"^1.4.0","fast-glob":"^3.3.3","langchain":"^1.2.35","@babel/types":"^7.28.5","cli-progress":"^3.12.0","@babel/parser":"^7.28.5","@babel/traverse":"^7.28.5","@langchain/core":"^1.1.34","compare-versions":"^6.1.1","@langchain/openai":"^1.3.0","@vue/compiler-sfc":"^3.5.29","@babel/preset-react":"^7.28.5","@babel/preset-typescript":"^7.28.5","@babel/plugin-syntax-top-level-await":"^7.14.5","@babel/plugin-syntax-import-assertions":"^7.27.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","ts-jest":"^29.4.5","ts-node":"^10.9.2","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^20.19.25","@types/chalk":"^0.4.31","@types/yargs":"^17.0.34","@types/js-yaml":"^4.0.9","@types/signale":"^1.4.7","@types/cli-progress":"^3.11.6"},"_npmOperationalInternal":{"tmp":"tmp/deplens_1.2.5_1781512010639_0.06268130528687021","host":"s3://npm-registry-packages-npm-production"}},"1.2.6":{"name":"@aquaori/deplens","version":"1.2.6","keywords":["npm","pnpm","dependency","analysis","unused","dependencies"],"author":{"name":"Aquaori"},"license":"MIT","_id":"@aquaori/deplens@1.2.6","maintainers":[{"name":"aquaori","email":"2432856811@qq.com"}],"bin":{"deplens":"dist/cli.js"},"dist":{"shasum":"c3f6fddcde8930266d883055e669545168c4029f","tarball":"https://registry.npmjs.org/@aquaori/deplens/-/deplens-1.2.6.tgz","fileCount":95,"integrity":"sha512-deAmrSt/dmIKS5IANJythFUrotWlqZe0YN0pYKskQd7PVnXQb8Y77adwuQSs5HouAExnKgtAgFZUpwObgXIv4w==","signatures":[{"sig":"MEQCIBes9YGqri5x3E8DFOCPo9PPi0pKD3F8uE/6SsM5roXCAiA4ImZz4aXKohLRDHU1EhNHF+wb/mD9H9DLW9cfHT94Bw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":571261},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20"},"gitHead":"9eb93995ddd0d1fd69969d1f3f33fa7af73c5298","scripts":{"dev":"npx tsx src/cli.ts check","chat":"npm run build && node dist/cli.js chat","lint":"eslint .","test":"node -r ./tests/helpers/node-compat.cjs ./node_modules/jest/bin/jest.js","build":"tsc","start":"node dist/index.js","test:ci":"node -r ./tests/helpers/node-compat.cjs ./node_modules/jest/bin/jest.js --runInBand","chat:src":"npx tsx src/cli.ts chat","lint:fix":"eslint . --fix","test:unit":"node -r ./tests/helpers/node-compat.cjs ./node_modules/jest/bin/jest.js tests/unit","dev:review":"npx tsx src/cli.ts check --review","test:coverage":"node -r ./tests/helpers/node-compat.cjs ./node_modules/jest/bin/jest.js --coverage","chat:src:review":"npx tsx src/cli.ts chat --review","test:integration":"node -r ./tests/helpers/node-compat.cjs ./node_modules/jest/bin/jest.js tests/integration"},"_npmUser":{"name":"aquaori","email":"2432856811@qq.com"},"_npmVersion":"11.11.1","description":"A precise dependency analysis tool for npm and pnpm projects","directories":{},"_nodeVersion":"24.15.0","dependencies":{"zod":"^4.3.6","chalk":"^5.6.2","yargs":"^18.0.0","dotenv":"^17.3.1","js-yaml":"^4.1.1","fast-glob":"^3.3.3","langchain":"^1.2.35","cli-progress":"^3.12.0","@babel/parser":"^7.28.5","@babel/traverse":"^7.28.5","@langchain/core":"^1.1.34","compare-versions":"^6.1.1","@langchain/openai":"^1.3.0","@vue/compiler-sfc":"^3.5.29"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"10.5.0","globals":"17.7.0","ts-jest":"^29.4.5","ts-node":"^10.9.2","@eslint/js":"10.0.1","strip-ansi":"6.0.1","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^20.19.25","@types/yargs":"^17.0.34","@types/js-yaml":"^4.0.9","typescript-eslint":"8.62.0","@types/cli-progress":"^3.11.6","@types/babel__traverse":"^7.28.0"},"_npmOperationalInternal":{"tmp":"tmp/deplens_1.2.6_1785122099402_0.19670320505402938","host":"s3://npm-registry-packages-npm-production"}},"1.2.7":{"name":"@aquaori/deplens","version":"1.2.7","description":"A precise dependency analysis tool for npm and pnpm projects","main":"dist/index.js","types":"dist/index.d.ts","bin":{"deplens":"dist/cli.js"},"engines":{"node":">=20"},"scripts":{"build":"tsc","dev":"npx tsx src/cli.ts check","dev:review":"npx tsx src/cli.ts check --review","chat:src":"npx tsx src/cli.ts chat","chat:src:review":"npx tsx src/cli.ts chat --review","chat":"npm run build && node dist/cli.js chat","lint":"eslint .","lint:fix":"eslint . --fix","test":"node -r ./tests/helpers/node-compat.cjs ./node_modules/jest/bin/jest.js","test:unit":"node -r ./tests/helpers/node-compat.cjs ./node_modules/jest/bin/jest.js tests/unit","test:integration":"node -r ./tests/helpers/node-compat.cjs ./node_modules/jest/bin/jest.js tests/integration","test:ci":"node -r ./tests/helpers/node-compat.cjs ./node_modules/jest/bin/jest.js --runInBand","test:coverage":"node -r ./tests/helpers/node-compat.cjs ./node_modules/jest/bin/jest.js --coverage","start":"node dist/index.js"},"keywords":["npm","pnpm","dependency","analysis","unused","dependencies"],"author":{"name":"Aquaori"},"license":"MIT","dependencies":{"@babel/parser":"^7.28.5","@babel/traverse":"^7.28.5","@langchain/core":"^1.1.34","@langchain/openai":"^1.3.0","@vue/compiler-sfc":"^3.5.29","chalk":"^5.6.2","cli-progress":"^3.12.0","compare-versions":"^6.1.1","dotenv":"^17.3.1","fast-glob":"^3.3.3","js-yaml":"^4.1.1","langchain":"^1.2.35","yargs":"^18.0.0","zod":"^4.3.6"},"devDependencies":{"@eslint/js":"10.0.1","@types/babel__traverse":"^7.28.0","@types/cli-progress":"^3.11.6","@types/jest":"^30.0.0","@types/js-yaml":"^4.0.9","@types/node":"^20.19.25","@types/yargs":"^17.0.34","eslint":"10.5.0","globals":"17.7.0","jest":"^30.2.0","strip-ansi":"6.0.1","ts-jest":"^29.4.5","ts-node":"^10.9.2","tsx":"^4.21.0","typescript":"^5.9.3","typescript-eslint":"8.62.0"},"gitHead":"d590f9b592446279bae1e390c9dace6fd2dbe91c","_id":"@aquaori/deplens@1.2.7","_nodeVersion":"24.15.0","_npmVersion":"11.11.1","dist":{"integrity":"sha512-dsqmTlyppjaQneG4zh0snu6KKnYORvCRJNI6mpPrMeGWQ7k8TXZPOK8qqTey7UgSOG1vQNKBpq0jKKf0bgtfkw==","shasum":"6f93f92e9ddf46ef82c8333bae3711b7c65ddd1e","tarball":"https://registry.npmjs.org/@aquaori/deplens/-/deplens-1.2.7.tgz","fileCount":95,"unpackedSize":578164,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCbLdzNOkHFWVnu0gxR/Rd17S+kbGd01St5B8p9g+ODFQIgIrveYheaKcU/FX/f8AifCe60PbsIVCYs0VPEMm3glhk="}]},"_npmUser":{"name":"aquaori","email":"2432856811@qq.com"},"directories":{},"maintainers":[{"name":"aquaori","email":"2432856811@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/deplens_1.2.7_1788583297420_0.2952794271766974"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-22T06:40:54.025Z","modified":"2026-09-05T04:41:37.717Z","1.0.0":"2025-11-22T06:40:54.301Z","1.0.1":"2025-11-23T09:23:11.610Z","1.0.2":"2025-11-23T10:23:39.298Z","1.0.4":"2025-11-26T06:42:10.027Z","1.0.3":"2025-11-26T06:44:30.968Z","1.0.6":"2025-11-27T14:02:36.812Z","1.0.8":"2026-03-04T14:04:01.292Z","1.1.0":"2026-03-21T07:37:25.445Z","1.2.0":"2026-03-22T11:39:47.662Z","1.2.1":"2026-03-22T11:55:29.814Z","1.2.2":"2026-03-29T09:17:32.157Z","1.2.3":"2026-03-29T09:46:10.147Z","1.2.4":"2026-04-11T09:21:56.604Z","1.2.5":"2026-06-15T08:26:50.831Z","1.2.6":"2026-07-27T03:14:59.581Z","1.2.7":"2026-09-05T04:41:37.569Z"},"author":{"name":"Aquaori"},"license":"MIT","keywords":["npm","pnpm","dependency","analysis","unused","dependencies"],"description":"A precise dependency analysis tool for npm and pnpm projects","maintainers":[{"name":"aquaori","email":"2432856811@qq.com"}],"readme":"# Deplens\r\n\r\n[中文说明](./assets/README_cn.md)\r\n\r\n![Deplens](./assets/deplens-cli-example.png)\r\n\r\nDeplens is a dependency analysis tool for Node.js projects. It combines AST-based static analysis, lockfile-aware dependency resolution, monorepo workspace inspection, and optional AI-assisted review to help identify:\r\n\r\n- unused dependencies\r\n- ghost dependencies\r\n- undeclared workspace dependencies\r\n- low-confidence dependency candidates that may still be used through tooling, config, or scripts\r\n\r\nIt supports both `npm` and `pnpm`, works in single-package and monorepo projects, and now includes an interactive `chat` mode powered by LangChain and an LLM.\r\n\r\n## Features\r\n\r\n- **Removal-risk grading, not a flat unused list**: whether a dependency is _used_ comes from source references only. The lockfile is then used to answer a different question — what happens if you delete the declaration. A package that other installed packages still depend on stays installed transitively, so dropping the declaration is low risk; a package required as a _peer dependency_ must stay declared. Deplens reports both instead of hiding either.\r\n- **Automatic Package Manager Detection**: It automatically chooses the correct `npm` or `pnpm` driver based on the target project and nearest applicable lockfile.\r\n- **Monorepo Support**: Deplens detects npm/pnpm workspaces, analyzes each package independently, and aggregates package-level issues at the monorepo root.\r\n- **Evidence Layer**: Every conclusion is backed by structured declaration, reference, issue, and signal evidence, collected on every run and included in the JSON report.\r\n- **Signals for Non-Standard Usage**: It records weak dependency-usage clues such as tooling strings, `require.resolve(...)`, and script commands to reduce false positives in real-world projects.\r\n- **AI Chat Mode**: The `chat` command opens an interactive terminal assistant that can answer natural-language questions about dependency usage, package summaries, ghost dependencies, and removal risk.\r\n- **AI Review for `check`**: The optional `--review` flag performs LLM-based secondary review for suspicious unused-dependency candidates and groups results into high-confidence unused, likely tooling-managed, and needs-manual-review buckets.\r\n- **JSON Output**: In addition to human-readable CLI output, Deplens can export structured JSON reports for CI scripts, dashboards, or further tooling.\r\n\r\n## Unused Dependency Classes\r\n\r\nDeplens never answers \"is this package needed\" — it answers \"can I delete this line from `package.json`\".\r\nDeleting a declaration does **not** uninstall a package that other installed packages still depend on,\r\nso those two things are graded separately:\r\n\r\n| Class                    | Meaning                                                                       | Recommendation                                                           |\r\n| ------------------------ | ----------------------------------------------------------------------------- | ------------------------------------------------------------------------ |\r\n| `unused-orphan`          | No source reference, and nothing else depends on it                           | Safe to remove; the package leaves the tree too                          |\r\n| `unused-still-installed` | No source reference, but other installed packages depend on it                | Safe to remove; the package stays installed transitively                 |\r\n| `unused-version-pin`     | No source reference, and the declared range is not accepted by every requirer | Removing changes version resolution — confirm the pin is not intentional |\r\n| `keep-peer-requirement`  | An installed package requires it as a **peer dependency**                     | Keep it; removing breaks installation                                    |\n| `risk-unknown`           | The lockfile could not be resolved, so transitive removal risk is unknown    | Verify the dependency tree before removing                              |\n\r\n`unused-still-installed` is folded to a count by default (it is the low-signal bucket); use `--verbose` to list it.\r\n\r\nDependencies are also treated as used when they are invoked from `package.json` scripts, and `@types/x`\r\nis treated as used whenever `x` itself is used or declared.\r\n\r\n## Technical Implementation\r\n\r\n- Parse source files with `@babel/parser` to extract dependency references from `import`, `require`, `import()`, and `export ... from`. Source is parsed as written — no transpilation and no minification — so `import type` stays distinguishable and every reference carries an exact file/line/column.\r\n- Parse lockfiles and manifests to resolve declared dependencies, the packages that require them, workspace relationships, and package-manager-specific behavior in both single-package and monorepo projects.\r\n- Build an evidence graph that records:\r\n    - dependency declarations\r\n    - dependency references\r\n    - issue evidence\r\n    - signal evidence for non-standard usage clues\r\n- Expose evidence and high-level query APIs that can be reused by:\r\n    - CLI reporting\r\n    - JSON output\r\n    - monorepo aggregation\r\n    - LangChain tools\r\n- Use LangChain to wrap project-aware tools for AI review, so the model works on structured project data rather than answering only from general knowledge.\r\n- Perform secondary review only for low-confidence candidates instead of all dependencies, which keeps token usage and review latency under control.\r\n\r\n## Why Deplens?\r\n\r\nMany dependency-checking tools stop at direct source imports. That works for simple projects, but it breaks down in real-world cases such as:\r\n\r\n- monorepo workspace packages\r\n- lockfile-driven installation behavior\r\n- config-only or tooling-only dependency usage\r\n- scripts that reference dependencies without normal imports\r\n- plugin or preset strings used in build pipelines\r\n\r\nDeplens is built to handle those cases more explicitly. Instead of outputting only a flat unused list, it tries to answer:\r\n\r\n- Is this dependency truly unused?\r\n- Is it referenced but undeclared?\r\n- Is it likely being used indirectly through tooling or config?\r\n- Is this result high-confidence, or should it be reviewed manually?\r\n\r\nThat is the main reason Deplens now includes evidence, signals, AI-assisted review, and an interactive chat flow.\r\n\r\n## Situations that Deplens Cannot Fully Analyze\r\n\r\nDeplens still starts from static analysis, so there are limits:\r\n\r\n- **Runtime-dependent imports** such as `import(variable)` or `require(variable)` cannot always be resolved precisely.\r\n- **Framework-specific conventions** may hide dependency usage behind custom loaders, generated code, or runtime hooks.\r\n- **Alias and virtual specifiers** are resolved from `tsconfig.json` / `jsconfig.json` `compilerOptions.paths`; aliases configured elsewhere (bundler-only aliases) may still appear as ghost references.\r\n- **AI review is assistive, not magical**. It improves low-confidence cases, but it does not replace deterministic static analysis or real runtime execution.\r\n\r\nBecause of that, Deplens separates:\r\n\r\n- high-confidence deterministic analysis\r\n- suspicious low-confidence candidates\r\n- optional AI-assisted secondary review\r\n\r\n## Installation\r\n\r\n```bash\r\nnpm install -g @aquaori/deplens\r\n```\r\n\r\nThis installs Deplens globally so that the `deplens` command can be used anywhere.\r\n\r\nIf you only want to use it in the current project:\r\n\r\n```bash\r\nnpm install --save-dev @aquaori/deplens\r\n```\r\n\r\n## Usage\r\n\r\n```bash\r\n# Show version\r\ndeplens -v\r\n\r\n# Show help\r\ndeplens -h\r\n\r\n# Analyze the current project\r\ndeplens check\r\n\r\n# Persist AI config in the user profile\r\ndeplens config set apiKey your_api_key\r\n\r\n# Start interactive AI chat\r\ndeplens chat\r\n```\r\n\r\n### `check`\r\n\r\n```bash\r\n# Analyze the current project\r\ndeplens check\r\n\r\n# Analyze a specific project\r\ndeplens check -p D:\\my-project\r\n\r\n# Export JSON to stdout\r\ndeplens check --json\r\n\r\n# Export JSON to a file\r\ndeplens check --json -o deplens-report.json\r\n\r\n# Run AI review for suspicious unused candidates\r\ndeplens check --review\r\n```\r\n\r\n`--review` is optional and only needed if you want AI-assisted secondary review for suspicious unused-dependency candidates.\r\n\r\n**Please note**: The AI review process may **consume more tokens** and seriously slow down the startup and analysis speed of Deplens, especially in some complex Monorepo projects. To save tokens and keep the default experience fast, review is disabled unless you explicitly pass `--review` to `check` or `chat`.\r\n\r\n### `chat`\r\n\r\n```bash\r\n# Start interactive chat mode\r\ndeplens chat\r\n\r\n# Chat about a specific project\r\ndeplens chat -p D:\\my-project\r\n\r\n# Start chat mode with AI review enabled before the session\r\ndeplens chat --review\r\n```\r\n\r\nThe `chat` command:\r\n\r\n- scans the project once\r\n- builds a project snapshot\r\n- exposes project-aware tools to the LLM\r\n- lets you ask natural-language questions in an interactive terminal UI\r\n\r\nTypical questions:\r\n\r\n- Which dependencies are truly unused?\r\n- Which packages have the most dependency issues?\r\n- Can I remove `react-dom` safely, and why?\r\n- Why does this package look unused even though the project still runs?\r\n\r\n### Common options\r\n\r\n- `--path` (`-p`): Project path to analyze. Defaults to the current directory.\r\n- `--silence` (`-s`): Silent mode. Suppresses normal CLI output.\r\n- `--ignoreDep` (`-id`): Ignore dependencies. Multiple values separated by commas.\r\n- `--ignorePath` (`-ip`): Ignore paths. Multiple values separated by commas.\r\n- `--ignoreFile` (`-if`): Ignore files. Multiple values separated by commas.\r\n- `--config` (`-c`): Path to a custom configuration file.\r\n- `--verbose` (`-V`): Verbose mode.\r\n- `--json` (`-J`): Output analysis as JSON.\r\n- `--output` (`-o`): Write generated output to a file.\r\n- `--review`: Enable optional AI secondary review for suspicious unused candidates.\r\n\r\nIf you installed Deplens locally instead of globally:\r\n\r\n```bash\r\nnpx @aquaori/deplens check\r\n```\r\n\r\n### `config`\r\n\r\nUse `config` to persist AI settings in the user profile. This is the recommended path for global installs because the values survive package updates.\r\n\r\n```bash\r\n# Persist required AI settings\r\ndeplens config set apiKey your_api_key\r\ndeplens config set baseUrl https://dashscope.aliyuncs.com/compatible-mode/v1\r\ndeplens config set model qwen-plus\r\n\r\n# Inspect current persisted settings\r\ndeplens config list\r\ndeplens config get apiKey\r\n\r\n# Remove one setting or clear all persisted settings\r\ndeplens config unset apiKey\r\ndeplens config reset\r\n\r\n# Print the actual config file path\r\ndeplens config path\r\n```\r\n\r\nSupported keys:\r\n\r\n- `apiKey` -> `QWEN_API_KEY`\r\n- `baseUrl` -> `QWEN_BASE_URL`\r\n- `model` -> `QWEN_MODEL`\r\n\r\n## Configuration File\r\n\r\nIf you want more control, create a `deplens.config.json` file in the project directory.\r\n\r\n### Ignore Rules\r\n\r\nDeplens ignores some common build/output paths by default:\r\n\r\n```javascript\r\n[\"/node_modules/\", \"/dist/\", \"/build/\", \".git\", \"*.d.ts\"];\r\n```\r\n\r\nYou can extend ignore rules with configuration:\r\n\r\n```json\r\n{\r\n    \"ignoreDep\": [\"nodemon\"],\r\n    \"ignorePath\": [\"test\", \"examples\"],\r\n    \"ignoreFile\": [\"src/legacy.ts\"]\r\n}\r\n```\r\n\r\nYou can also point to a custom config file explicitly:\r\n\r\n```bash\r\ndeplens check -c D:\\deplens.config.json\r\n```\r\n\r\nOr pass ignore rules directly through CLI arguments:\r\n\r\n```bash\r\ndeplens check -id nodemon,@next/mdx -ip test,examples -if src/legacy.ts\r\n```\r\n\r\n### AI Review Environment Variables\r\n\r\n`chat` and `check --review` require AI configuration.\r\n\r\nThe recommended way is to persist the configuration through the CLI:\r\n\r\n```bash\r\ndeplens config set apiKey your_api_key\r\ndeplens config set baseUrl https://dashscope.aliyuncs.com/compatible-mode/v1\r\ndeplens config set model qwen-plus\r\n```\r\n\r\nThese values are stored in the user profile instead of the installed package directory, so global package updates do not erase them.\r\n\r\nDeplens still supports project-level `.env` files or process environment variables:\r\n\r\n```env\r\nQWEN_MODEL=qwen-plus\r\nQWEN_API_KEY=your_api_key\r\nQWEN_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1\r\n```\r\n\r\nPriority order is:\r\n\r\n1. process environment variables\r\n2. persisted user config from `deplens config`\r\n3. the `.env` file in the current working directory\r\n\r\nIf these variables are missing, Deplens will refuse to enter AI-assisted flows and tell you which fields are missing.\r\n\r\nThe error message also suggests the exact `deplens config set ...` commands to run next, for example:\r\n\r\n```text\r\nAI review features require these settings: QWEN_MODEL, QWEN_API_KEY, QWEN_BASE_URL.\r\nRecommended next step:\r\ndeplens config set model <your_model_value>\r\ndeplens config set apiKey <your_apiKey_value>\r\ndeplens config set baseUrl <your_baseUrl_value>\r\n```\r\n\r\n## Update Log\r\n\r\n- 1.2.6\r\n    - **Breaking (analysis semantics)**: a declared dependency is no longer excluded from analysis just because another installed package depends on it. Such declarations are now reported as `unused-still-installed` (safe to remove) instead of being silently skipped. Dependencies required as peer dependencies are reported as `keep-peer-requirement`.\r\n    - **Breaking (JSON schema)**: `totalDependencies` is now the number of declared dependencies (it previously counted lockfile dependency edges, which is now `transitiveEdgeCount`). Added `unusedDependenciesCount` (`ununsedDependenciesCount` is kept as a deprecated alias), `typeOnlyDependencies`, `dynamicImports`, and `lockfile`. Dynamic imports moved out of `unusedDependencies` into `dynamicImports`.\r\n    - Evidence is now collected on every run, so `check --json` includes the full evidence chain without `--review`.\r\n    - Node built-in modules and `tsconfig`/`jsconfig` path aliases are no longer reported as ghost dependencies.\r\n    - `import type` usage is reported separately instead of being counted as unused; dependencies invoked from `package.json` scripts and `@types/*` companions are treated as used.\r\n    - Added `export ... from` as a tracked reference kind.\r\n    - Removed the transpile + minify stage from the analysis pipeline; source is parsed as written, roughly halving analysis time and making every reference carry an exact file/line/column.\r\n    - Fixed: a zero-argument `require()` crashed the whole analysis; monorepo ghost dependencies were counted but never listed; code-context snippets returned nothing whenever the analyzed project was not the current directory or in monorepo mode; the AI investigation step fed the model the inverse of the evidence it asked for; `recursionLimit` was passed in the wrong position and never applied.\r\n    - Removed the unimplemented `--html` flag.\r\n    - Deep analysis now trims the report to a context budget and says what it dropped; chat history is bounded; prior AI verdicts no longer feed back into confidence scoring.\r\n\r\n- 1.2.5\r\n    - Refactored the Agent workflow and tightened the judgment constraints.\r\n    - Added Agent memory and knowledge base features.\r\n\r\n- 1.2.3\r\n    - Fixed evidence and signal positions so local code review now points to the original source lines instead of transpiled offsets.\r\n    - Improved dependency context review accuracy for tooling-based usage, reducing false snippet matches and unsafe removal suggestions.\r\n    - Tightened the blocking policy for unsafe recommendations in chat mode.\r\n\r\n- 1.2.2\r\n    - Improved `--review` so only suspicious unused candidates are sent to AI review.\r\n    - Refined `check --review` output into grouped final results instead of raw follow-up logs.\r\n    - Added stronger local code/context review for suspicious dependencies.\r\n    - Improved chat UX with language-following replies, safer suggestion sanitization, richer status feedback, and better CJK terminal wrapping.\r\n\r\n- 1.2.0\r\n    - Added LangChain-powered interactive `chat` mode.\r\n    - Added optional `--review` flow for AI-assisted secondary review in `check`.\r\n    - Added structured evidence and signal collection for non-standard dependency usage clues.\r\n    - Added dependency review candidates and low-confidence classification.\r\n    - Added local code-context bundle support for dependency review and explanation.\r\n    - Added interactive terminal UI for `chat`, including status feedback and structured answer rendering.\r\n    - Added AI configuration validation before entering AI-assisted flows.\r\n\r\n- 1.1.0\r\n    - Added automatic package manager detection for both single-package and monorepo analysis.\r\n    - Added monorepo workspace analysis for npm and pnpm workspaces.\r\n    - Added JSON report output with `--json` and file export support through `--output`.\r\n    - Added lockfile resolution based on the nearest applicable workspace package path.\r\n    - Improved CLI output for monorepo mode, including compact package summaries and better progress handling.\r\n    - Fixed BOM-related `package.json` parsing issues in workspace packages.\r\n    - Fixed CLI processes not exiting automatically after analysis.\r\n    - Fixed monorepo output issues caused by dynamic imports being rendered as `undefined`.\r\n    - Reduced noisy non-essential stderr output produced during transpilation.\r\n\r\n- 1.0.7\r\n    - Improved `.vue` file analysis support.\r\n\r\n- 1.0.6\r\n    - Fixed several CLI and ignore-rule related issues.\r\n\r\n- 1.0.5\r\n    - Optimized logger behavior and result output.\r\n\r\n- 1.0.4\r\n    - Fixed `.vue` transpilation edge cases.\r\n\r\n- 1.0.3\r\n    - Added `.vue` support.\r\n    - Improved output formatting and ignore options.\r\n\r\n- 1.0.2\r\n    - Fixed initial release issues.\r\n\r\n- 1.0.1\r\n    - Fixed dynamic import parsing issues.\r\n\r\n- 1.0.0\r\n    - Initial release.\r\n\r\n## License\r\n\r\nThis project is licensed under the MIT License.\r\n\r\nYou are free to use, modify, copy, and distribute Deplens in personal or commercial projects as long as the copyright notice is preserved.\r\n\r\nFor the full license text, see [MIT License](https://opensource.org/licenses/MIT).\r\n\r\n## Final Words\r\n\r\nDeplens is no longer just a flat dependency checker. It is gradually evolving into a dependency-governance assistant built on top of:\r\n\r\n- deterministic static analysis\r\n- structured evidence\r\n- monorepo-aware aggregation\r\n- low-confidence candidate review\r\n- AI-assisted interactive explanation\r\n\r\nAlthough the project has been tested in various environments before launching, the actual scenarios are usually more complex, and if you encounter wrong conclusions, framework compatibility issues, or some monorepo boundary scenarios in real projects, please submit an issue or pull request. Feedback from real projects is the fastest way to continue polishing Deplens.\r\n","readmeFilename":"README.md"}