{"_id":"@donativo/roux","_rev":"9-e3170f819bace973ac7774354b6ff22b","name":"@donativo/roux","dist-tags":{"latest":"0.4.1"},"versions":{"0.1.0":{"name":"@donativo/roux","version":"0.1.0","keywords":["git","code-analysis","hotspot","coupling","churn","vcs","mining"],"license":"MIT","_id":"@donativo/roux@0.1.0","maintainers":[{"name":"youngleehua","email":"youngleemails@gmail.com"}],"homepage":"https://github.com/chefmarvin/roux#readme","bugs":{"url":"https://github.com/chefmarvin/roux/issues"},"bin":{"roux":"dist/cli.js"},"dist":{"shasum":"81628579f8c51f6498cbf4ec168a1cff04f5ea2f","tarball":"https://registry.npmjs.org/@donativo/roux/-/roux-0.1.0.tgz","fileCount":95,"integrity":"sha512-p/IOX0c6jkhQRnkWBkM+bH3ikw2Lib/D4xFdy1jIQFRTOB5h5x+Mttq/WRyYeypvX0rY3uJo5rWC7O9NO2VFjw==","signatures":[{"sig":"MEUCIQCaf/dPKqTstdy+XMauwsYTFpP7tliSZkVOpZjKi3Up6gIgNLdAV5No73L3q87Gm9tPpT/wJuR3WpMSKlFQbAD1KhM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":108456},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"8988636f6ce2ca197ff17ce75f53f7eb94497159","scripts":{"test":"node --experimental-vm-modules node_modules/.bin/jest","build":"tsc","start":"tsx src/cli.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"youngleehua","email":"youngleemails@gmail.com"},"repository":{"url":"git+https://github.com/chefmarvin/roux.git","type":"git"},"_npmVersion":"11.6.2","description":"Mine and analyze git history — find hotspots, coupling, ownership patterns, and team dynamics","directories":{},"_nodeVersion":"24.11.1","dependencies":{"commander":"^14"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4","jest":"^29","ts-jest":"^29","ts-node":"^10.9.2","typescript":"^5","@types/jest":"^29","@types/node":"^22"},"_npmOperationalInternal":{"tmp":"tmp/roux_0.1.0_1772210329906_0.9217039925652672","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@donativo/roux","version":"0.2.0","keywords":["git","code-analysis","hotspot","coupling","churn","vcs","mining"],"license":"MIT","_id":"@donativo/roux@0.2.0","maintainers":[{"name":"youngleehua","email":"youngleemails@gmail.com"}],"homepage":"https://github.com/chefmarvin/roux#readme","bugs":{"url":"https://github.com/chefmarvin/roux/issues"},"bin":{"roux":"dist/cli.js"},"dist":{"shasum":"cec482800ddc856ef026fcb10250140fafad3272","tarball":"https://registry.npmjs.org/@donativo/roux/-/roux-0.2.0.tgz","fileCount":101,"integrity":"sha512-OXr+G+Vnem/e5MQUsmjinwVaQfJM8Qw7/zKJgvS9USrOFkxHNVps91ZyJaf8rpxaQfcZfS0lpCxSRhGmeXsDvQ==","signatures":[{"sig":"MEUCIQCxcyIWYIaSWMMGjsy4PJMH2tT10YmRpjYdd9uUqMt7xgIgVMULqAPaJdZJTkzF85gtD16BGe9w+5RX3/y2TFuUq6w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":117217},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"cee84f907fbc6c382899b1d06b8281f8ce1be597","scripts":{"test":"node --experimental-vm-modules node_modules/.bin/jest","build":"tsc","start":"tsx src/cli.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"youngleehua","email":"youngleemails@gmail.com"},"repository":{"url":"git+https://github.com/chefmarvin/roux.git","type":"git"},"_npmVersion":"11.6.2","description":"Mine and analyze git history — find hotspots, coupling, ownership patterns, and team dynamics","directories":{},"_nodeVersion":"24.11.1","dependencies":{"commander":"^14"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4","jest":"^29","ts-jest":"^29","ts-node":"^10.9.2","typescript":"^5","@types/jest":"^29","@types/node":"^22"},"_npmOperationalInternal":{"tmp":"tmp/roux_0.2.0_1772508813473_0.2351792624245166","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@donativo/roux","version":"0.2.1","keywords":["git","code-analysis","hotspot","coupling","churn","vcs","mining"],"license":"MIT","_id":"@donativo/roux@0.2.1","maintainers":[{"name":"youngleehua","email":"youngleemails@gmail.com"}],"homepage":"https://github.com/chefmarvin/roux#readme","bugs":{"url":"https://github.com/chefmarvin/roux/issues"},"bin":{"roux":"dist/cli.js"},"dist":{"shasum":"d0d56c47983e4c1ce311be76efb75fb424b6233a","tarball":"https://registry.npmjs.org/@donativo/roux/-/roux-0.2.1.tgz","fileCount":101,"integrity":"sha512-JDFq+GlN7fOP5Kjgy8ulxKI7AO+PTaz/h4SrMoINB4SS67fRAga/IK9bLnLCM6318Kce7Vyg1TB85ochHzV0nQ==","signatures":[{"sig":"MEUCIQD7iayNmILNVym0CuMi07ROBtbid7FdaeO4hPbWzp4XkgIgUdARzLbnTPNX9UL8/xIuCMtotGwUy4zZzanDRAppey0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":117564},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"e5a9a53b5094edfc041408db08dfa2a38f366cbf","scripts":{"test":"node --experimental-vm-modules node_modules/.bin/jest","build":"tsc","start":"tsx src/cli.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"youngleehua","email":"youngleemails@gmail.com"},"repository":{"url":"git+https://github.com/chefmarvin/roux.git","type":"git"},"_npmVersion":"11.6.2","description":"Mine and analyze git history — find hotspots, coupling, ownership patterns, and team dynamics","directories":{},"_nodeVersion":"24.11.1","dependencies":{"commander":"^14"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4","jest":"^29","ts-jest":"^29","ts-node":"^10.9.2","typescript":"^5","@types/jest":"^29","@types/node":"^22"},"_npmOperationalInternal":{"tmp":"tmp/roux_0.2.1_1772509602173_0.47168574870778834","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@donativo/roux","version":"0.2.2","keywords":["git","code-analysis","hotspot","coupling","churn","vcs","mining"],"license":"MIT","_id":"@donativo/roux@0.2.2","maintainers":[{"name":"youngleehua","email":"youngleemails@gmail.com"}],"homepage":"https://github.com/chefmarvin/roux#readme","bugs":{"url":"https://github.com/chefmarvin/roux/issues"},"bin":{"roux":"dist/cli.js"},"dist":{"shasum":"3253a8ddc85c26a1227453afd68c8fb8fd496a80","tarball":"https://registry.npmjs.org/@donativo/roux/-/roux-0.2.2.tgz","fileCount":101,"integrity":"sha512-ue+GGpNsfBKqX/gqnQJzJHiNs11q74Bb99H1n26MM5BwZK5y25pvoGM72I59Ohkg6yxABrCLZDcJXAhw58GMxw==","signatures":[{"sig":"MEQCIHT32odQlDqSrBJ2LKvwEqTOIxRnyfkVeRwz48KCjbg4AiAF8G0oa0alG0TFtFshIZdaoMnYxvbyUPdnoPtHnkNgAQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":117605},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"7642592d459f351b058f9cbc851dbb9a44e05ef1","scripts":{"test":"node --experimental-vm-modules node_modules/.bin/jest","build":"tsc","start":"tsx src/cli.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"youngleehua","email":"youngleemails@gmail.com"},"repository":{"url":"git+https://github.com/chefmarvin/roux.git","type":"git"},"_npmVersion":"11.6.2","description":"Mine and analyze git history — find hotspots, coupling, ownership patterns, and team dynamics","directories":{},"_nodeVersion":"24.11.1","dependencies":{"commander":"^14"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4","jest":"^29","ts-jest":"^29","ts-node":"^10.9.2","typescript":"^5","@types/jest":"^29","@types/node":"^22"},"_npmOperationalInternal":{"tmp":"tmp/roux_0.2.2_1772520221713_0.8151052805754653","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@donativo/roux","version":"0.3.0","keywords":["git","code-analysis","hotspot","coupling","churn","vcs","mining"],"license":"MIT","_id":"@donativo/roux@0.3.0","maintainers":[{"name":"youngleehua","email":"youngleemails@gmail.com"}],"homepage":"https://github.com/chefmarvin/roux#readme","bugs":{"url":"https://github.com/chefmarvin/roux/issues"},"bin":{"roux":"dist/cli.js"},"dist":{"shasum":"48621bb3e69084de76a83b7196a4af4c005801f6","tarball":"https://registry.npmjs.org/@donativo/roux/-/roux-0.3.0.tgz","fileCount":101,"integrity":"sha512-uzGdrQyOJKc13IU+RU07gSW4VIE3ioXnfgW/yWY7XKXdXQC16R882kWnKLqiVSZrMO/ziFdSHQxMGLa3fyJLBw==","signatures":[{"sig":"MEUCIBLm/zZtoZ7wjBxvIX5Y4kO+m0j4Fr72xEe+Bg72p1f+AiEA3ltnCjzoYbopC0KN1ggydz/EDimSLX6SNiF2RYJOAjc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCvNqc5yitVuRnQ2iBJUk0crVp1R5KYQ7snXOLktfxl2AIhAO1L9ZPEvayd9I1VD1SgYHgPVMzj9/4Bz6Venrw2MBeH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":119329},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"b812a168b8a224c6b04edb021a71e7f7702225f7","scripts":{"test":"node --experimental-vm-modules node_modules/.bin/jest","build":"tsc","start":"tsx src/cli.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"youngleehua","email":"youngleemails@gmail.com"},"repository":{"url":"git+https://github.com/chefmarvin/roux.git","type":"git"},"_npmVersion":"11.17.0","description":"Mine and analyze git history — find hotspots, coupling, ownership patterns, and team dynamics","directories":{},"_nodeVersion":"26.5.0","dependencies":{"commander":"^14"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4","jest":"^29","ts-jest":"^29","ts-node":"^10.9.2","typescript":"^5","@types/jest":"^29","@types/node":"^22"},"_npmOperationalInternal":{"tmp":"tmp/roux_0.3.0_1790075731364_0.9125883094136262","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@donativo/roux","version":"0.3.1","keywords":["git","code-analysis","hotspot","coupling","churn","vcs","mining"],"license":"MIT","_id":"@donativo/roux@0.3.1","maintainers":[{"name":"youngleehua","email":"youngleemails@gmail.com"}],"homepage":"https://github.com/chefmarvin/roux#readme","bugs":{"url":"https://github.com/chefmarvin/roux/issues"},"bin":{"roux":"dist/cli.js"},"dist":{"shasum":"176bbae6a8b11ae1267d10d6ea42128e2cbc9a8e","tarball":"https://registry.npmjs.org/@donativo/roux/-/roux-0.3.1.tgz","fileCount":101,"integrity":"sha512-CDnOt/9qc6v9y4gFCMsv3qujvs7VpPn/YpzsNz6m385Qu958ilemVAK9aUs+hcbxUaOi7PPdrW3nJE49UATI9A==","signatures":[{"sig":"MEYCIQD63KKD3k1YV9XMqhG0PDO61LQGwp6tLTVZDp4bCeepFwIhAPiK3Vc0B601Po3+nwXP7E8Of+BH7/gyznmmXYv7zK4h","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCcuz2iUzrSjJYXiWgXiLlxyh3SuK/sDEvyTvS1DRYaVgIhAM9jgAeGk70Wbzv7DfFDPGlz/pvxrR/0m7xJrxh30PRh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":120322},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"706baa68c7d3c93704bbd8a6fb03e8c6e67d30bd","scripts":{"test":"node --experimental-vm-modules node_modules/.bin/jest","build":"tsc","start":"tsx src/cli.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"youngleehua","email":"youngleemails@gmail.com"},"repository":{"url":"git+https://github.com/chefmarvin/roux.git","type":"git"},"_npmVersion":"11.17.0","description":"Mine and analyze git history — find hotspots, coupling, ownership patterns, and team dynamics","directories":{},"_nodeVersion":"26.5.0","dependencies":{"commander":"^14"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4","jest":"^29","ts-jest":"^29","ts-node":"^10.9.2","typescript":"^5","@types/jest":"^29","@types/node":"^22"},"_npmOperationalInternal":{"tmp":"tmp/roux_0.3.1_1790077547515_0.5176618967328097","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@donativo/roux","version":"0.3.2","keywords":["git","code-analysis","hotspot","coupling","churn","vcs","mining"],"license":"MIT","_id":"@donativo/roux@0.3.2","maintainers":[{"name":"youngleehua","email":"youngleemails@gmail.com"}],"homepage":"https://github.com/chefmarvin/roux#readme","bugs":{"url":"https://github.com/chefmarvin/roux/issues"},"bin":{"roux":"dist/cli.js"},"dist":{"shasum":"4f63472c14cb3f502666f7e905711a76b4af47cd","tarball":"https://registry.npmjs.org/@donativo/roux/-/roux-0.3.2.tgz","fileCount":101,"integrity":"sha512-npIU4cBXYHIfSwqJjwFSZU6msCmuu41n/ZBkPzayBYMipRN71oqd9AjKFjPK2bA1zeok6e2NceRuVu7ZVHWhMw==","signatures":[{"sig":"MEQCIAK04cdszLRZh4Pgt1AtQiY4eMWVHT8r/DVD3TlCUAnJAiB8vCGoFWFNSCOwkjdpY+WQHLTbPHMoyij1D8qlGBuAmA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICXQytMdgMjL7tUvd452PlSts+gq2X8wVjjQiygJ9zQsAiBt/ll0K88BQQgj7Wht6nu4ZObOomT4gVN7qnfMz3bW0g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":120711},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"a82d1f2bd59293dc22ecfdac078996af00343e24","scripts":{"test":"node --experimental-vm-modules node_modules/.bin/jest","build":"tsc","start":"tsx src/cli.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"youngleehua","email":"youngleemails@gmail.com"},"repository":{"url":"git+https://github.com/chefmarvin/roux.git","type":"git"},"_npmVersion":"11.17.0","description":"Mine and analyze git history — find hotspots, coupling, ownership patterns, and team dynamics","directories":{},"_nodeVersion":"26.5.0","dependencies":{"commander":"^14"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4","jest":"^29","ts-jest":"^29","ts-node":"^10.9.2","typescript":"^5","@types/jest":"^29","@types/node":"^22"},"_npmOperationalInternal":{"tmp":"tmp/roux_0.3.2_1790082022468_0.14957762742259106","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@donativo/roux","version":"0.4.0","keywords":["git","code-analysis","hotspot","coupling","churn","vcs","mining"],"license":"MIT","_id":"@donativo/roux@0.4.0","maintainers":[{"name":"youngleehua","email":"youngleemails@gmail.com"}],"homepage":"https://github.com/chefmarvin/roux#readme","bugs":{"url":"https://github.com/chefmarvin/roux/issues"},"bin":{"roux":"dist/cli.js"},"dist":{"shasum":"334eaca14992017c7052a0597101af5084c320bd","tarball":"https://registry.npmjs.org/@donativo/roux/-/roux-0.4.0.tgz","fileCount":101,"integrity":"sha512-uND9pKHhLeT+BCkK26grd8o0H9YDc+0+UZljlrN62M7Kmi//49aa/HvxgYy36y5TKUnit+dner3NYjgameD0/Q==","signatures":[{"sig":"MEQCIDY/sg7f4Hxuv0VcpFGcKtfBLkS/0IVpE+QYFLlRlWJUAiAvire6lOWBa6qNDzVdsSTjjIQxCsoSTYLvVMVidwtW7Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC+TwXp3OzoDzKA7Q36hgIT6+lfq5MneLfG6I819WgzgwIgHZhoaZ4f+wT3iS0Nl8Yq669CzQU7wYeYqIAKNCz5gm0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":121735},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"53fb406ef3ff88674edfc7681b3fbd70fd4d58f4","scripts":{"test":"node --experimental-vm-modules node_modules/.bin/jest","build":"tsc","start":"tsx src/cli.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"youngleehua","email":"youngleemails@gmail.com"},"repository":{"url":"git+https://github.com/chefmarvin/roux.git","type":"git"},"_npmVersion":"11.17.0","description":"Mine and analyze git history — find hotspots, coupling, ownership patterns, and team dynamics","directories":{},"_nodeVersion":"26.5.0","dependencies":{"commander":"^14"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4","jest":"^29","ts-jest":"^29","ts-node":"^10.9.2","typescript":"^5","@types/jest":"^29","@types/node":"^22"},"_npmOperationalInternal":{"tmp":"tmp/roux_0.4.0_1790084029291_0.18531966102243835","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"_id":"@donativo/roux@0.4.1","bin":{"roux":"dist/cli.js"},"bugs":{"url":"https://github.com/chefmarvin/roux/issues"},"dist":{"shasum":"508e7f3476bb382328a70b5be4da70f76fb5bf2c","tarball":"https://registry.npmjs.org/@donativo/roux/-/roux-0.4.1.tgz","fileCount":101,"integrity":"sha512-a85RJDKTE8FHL/sfQDFIyoCxedAzirmHl31YcpOVdxaL82xzzEQ7ZoB91Xp34IFlgoff8J89F+K1V26mdpLrew==","signatures":[{"sig":"MEUCIQDma7xFhQ0ofm+hjXbzherWuaaSdQEF15lLmN7CwfGuWgIgUB0tgnX2GDWjz2bgPDb219m2chHPqR73x+CyPNNOn20=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCu0/sO32vM05ZTi73YEipRvh0CPCtZj2ybISx8T8aj9wIhAI4F6bjhylJP268naCy5t99SbQEfHiyI3LDMun7kSuHh"}],"unpackedSize":121997},"main":"dist/index.js","name":"@donativo/roux","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"2d4acb4d4ef53c72a0daa8e402728cc98a2146ef","license":"MIT","scripts":{"test":"node --experimental-vm-modules node_modules/.bin/jest","build":"tsc","start":"tsx src/cli.ts","prepublishOnly":"npm run build"},"version":"0.4.1","_npmUser":{"name":"youngleehua","email":"youngleemails@gmail.com"},"homepage":"https://github.com/chefmarvin/roux#readme","keywords":["git","code-analysis","hotspot","coupling","churn","vcs","mining"],"repository":{"url":"git+https://github.com/chefmarvin/roux.git","type":"git"},"_npmVersion":"11.17.0","description":"Mine and analyze git history — find hotspots, coupling, ownership patterns, and team dynamics","directories":{},"maintainers":[{"name":"youngleehua","email":"youngleemails@gmail.com"}],"_nodeVersion":"26.5.0","dependencies":{"commander":"^14"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4","jest":"^29","ts-jest":"^29","ts-node":"^10.9.2","typescript":"^5","@types/jest":"^29","@types/node":"^22"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/roux_0.4.1_1790092857821_0.11082856259538287"}}},"time":{"created":"2026-02-27T16:38:49.850Z","modified":"2026-09-22T16:00:58.337Z","0.1.0":"2026-02-27T16:38:50.057Z","0.2.0":"2026-03-03T03:33:33.646Z","0.2.1":"2026-03-03T03:46:42.348Z","0.2.2":"2026-03-03T06:43:41.840Z","0.3.0":"2026-09-22T11:15:31.481Z","0.3.1":"2026-09-22T11:45:47.606Z","0.3.2":"2026-09-22T13:00:22.562Z","0.4.0":"2026-09-22T13:33:49.375Z","0.4.1":"2026-09-22T16:00:57.933Z"},"bugs":{"url":"https://github.com/chefmarvin/roux/issues"},"license":"MIT","homepage":"https://github.com/chefmarvin/roux#readme","keywords":["git","code-analysis","hotspot","coupling","churn","vcs","mining"],"repository":{"url":"git+https://github.com/chefmarvin/roux.git","type":"git"},"description":"Mine and analyze git history — find hotspots, coupling, ownership patterns, and team dynamics","maintainers":[{"name":"youngleehua","email":"youngleemails@gmail.com"}],"readme":"# Roux\n\nMine and analyze git history to understand how your codebase evolves — find hotspots, hidden coupling, ownership patterns, and team dynamics from commit data alone.\n\n挖掘和分析 git 历史，理解代码库的演变 — 仅凭 commit 数据就能发现热点、隐式耦合、代码所有权和团队协作模式。\n\nRoux provides 18 analyses covering code hotspots, coupling, churn, ownership, and team collaboration. Written in TypeScript, it starts in milliseconds and installs with `npm install`. Based on the analysis methods from [code-maat](https://github.com/adamtornhill/code-maat), with fully compatible output.\n\nRoux 提供 18 种分析，覆盖代码热点、耦合、变动、所有权和团队协作。TypeScript 编写，毫秒级启动，`npm install` 即可使用。基于 [code-maat](https://github.com/adamtornhill/code-maat) 的分析方法，输出兼容。\n\n## Quick Start / 快速开始\n\n```bash\n# Analyze the current git repository / 分析当前 git 仓库\nnpx roux summary\nnpx roux coupling\nnpx roux main-dev\n\n# Analyze last year only / 只分析最近一年\nnpx roux coupling --after 2025-01-01\n\n# Between two releases / 两个版本之间\nnpx roux coupling --rev v1.0..v2.0\n\n# Date range / 日期范围\nnpx roux revisions --after 2024-01-01 --before 2025-01-01\n\n# Analyze a specific log file / 分析指定的日志文件\nnpx roux revisions -l git.log\n\n# Generate a log file first, then analyze / 先生成日志文件，再分析\ngit log --all --numstat --date=short --pretty=format:'--%h--%ad--%aN--%s' --no-renames > git.log\nnpx roux hotspot -l git.log\n```\n\n## Installation / 安装\n\n```bash\nnpm install roux\n```\n\nOr run directly / 或直接运行:\n\n```bash\nnpx roux <analysis> [options]\n```\n\n## Analyses / 分析类型\n\nRoux supports 18 analyses:\n\nRoux 支持 18 种分析：\n\n| Analysis / 分析        | Description / 说明                                            | Key Output / 关键输出          |\n|------------------------|---------------------------------------------------------------|--------------------------------|\n| `summary`              | Repository statistics / 仓库统计                              | commits, entities, authors     |\n| `revisions`            | Most modified files / 修改最多的文件                          | entity, n-revs                 |\n| `authors`              | Author diversity per file / 每个文件的作者多样性              | entity, n-authors, n-revs      |\n| `coupling`             | Files that change together / 经常一起修改的文件               | entity, coupled, degree        |\n| `soc`                  | Sum of coupling per file / 每个文件的耦合度总和               | entity, soc                    |\n| `abs-churn`            | Daily code churn / 每日代码变动量                             | date, added, deleted, commits  |\n| `entity-churn`         | Code churn per file / 每个文件的代码变动量                    | entity, added, deleted         |\n| `author-churn`         | Code churn per author / 每个作者的代码变动量                  | author, added, deleted         |\n| `age`                  | Months since last change / 距最后修改的月数                   | entity, age-months             |\n| `entity-ownership`     | Who owns what (by LOC) / 代码所有权（按代码行数）             | entity, author, added, deleted |\n| `main-dev`             | Primary developer (by lines added) / 主要开发者（按新增行数） | entity, main-dev, ownership    |\n| `main-dev-by-revs`     | Primary developer (by commits) / 主要开发者（按提交次数）     | entity, main-dev, ownership    |\n| `refactoring-main-dev` | Top refactorer (by lines deleted) / 主要重构者（按删除行数）  | entity, main-dev, ownership    |\n| `entity-effort`        | Effort distribution / 工作量分布                              | entity, author, author-revs    |\n| `fragmentation`        | Knowledge fragmentation / 知识碎片化                          | entity, fractal-value          |\n| `communication`        | Developer collaboration / 开发者协作关系                      | author, peer, strength         |\n| `messages`             | Commit message pattern matching / 提交信息模式匹配            | entity, matches                |\n| `identity`             | Raw modification data / 原始修改数据                          | all fields                     |\n\n### When to Use Each Analysis / 各分析使用场景\n\n#### Code Hotspots & Complexity / 代码热点与复杂度\n\n- **`summary`** — Quick overview of project scale / 快速了解项目规模\n- **`revisions`** — Find most frequently modified files (hotspots) / 找出修改最频繁的文件（热点）\n- **`age`** — Find code that hasn't changed in a long time (stable infrastructure or forgotten debt) / 找出长期未修改的代码（可能是稳定的基础设施，也可能是被遗忘的技术债）\n\n#### Code Coupling / 代码耦合\n\n- **`coupling`** — Find files that often change together (implicit dependencies) / 找出经常一起修改的文件对（隐式依赖）\n- **`soc`** — Sum of coupling per file. High soc = \"God file\" that's coupled to too many others, risky to change / 每个文件的耦合度总和。高 soc = God 文件，与过多文件耦合，改动风险大\n- **`messages`** — Match commit message patterns (e.g. \"Fix\", \"Bug\") to find bug-prone files / 按 commit message 匹配模式（如 \"Fix\", \"Bug\"），找出 bug 重灾区\n\n#### Code Churn / 代码变动\n\n- **`abs-churn`** — Daily code churn, identify development rhythm / 每日代码变动量，识别开发节奏\n- **`entity-churn`** — Churn per file, combine with revisions to identify high-risk files / 每个文件的变动量，结合 revisions 识别高风险文件\n- **`author-churn`** — Churn per author / 每个作者的变动量\n\n#### Code Ownership / 代码所有权\n\n- **`entity-ownership`** — Who owns which code (by lines added) / 谁拥有哪些代码（按新增行数）\n- **`main-dev`** — Primary developer per file (by lines added). Ownership < 0.5 = no clear owner / 每个文件的主要开发者（按新增行数）。ownership < 0.5 表示没有明确负责人\n- **`main-dev-by-revs`** — Primary developer per file (by commit count) / 按 commit 次数计算的主要开发者\n- **`refactoring-main-dev`** — Who is doing refactoring (by lines deleted) / 谁在做重构（按删除行数）\n\n#### Team & Collaboration / 团队与协作\n\n- **`entity-effort`** — Effort distribution across files / 工作量分布\n- **`fragmentation`** — Knowledge fragmentation level (0–1). High = many people touching code with no clear owner / 知识碎片化程度（0–1）。值高说明多人零散修改，无人真正负责\n- **`communication`** — Developer collaboration network / 开发者协作网络\n- **`identity`** — Raw data export for custom analysis / 原始数据导出，供自定义分析\n\n## CLI Options / 命令行选项\n\n```\nroux <analysis> [options]\n```\n\n### Input / 输入\n\n| Flag | Description / 说明 | Default / 默认值 |\n|------|-------------|---------|\n| `-l, --log <file>` | Git log file path / 日志文件路径 | reads current repo / 读取当前仓库 |\n| `--repo <path>` | Git repository path / Git 仓库路径 | current directory / 当前目录 |\n| `--after <date>` | Only commits after date / 只包含此日期之后的提交 (YYYY-MM-DD) | — |\n| `--before <date>` | Only commits before date / 只包含此日期之前的提交 (YYYY-MM-DD) | — |\n| `--rev <range>` | Git revision range / Git 版本范围 (e.g. `v1.0..v2.0`) | `--all` |\n| `-c, --format <fmt>` | Log format / 日志格式: `git2` or `git` | `git2` |\n\nRoux also reads from stdin / 也支持从标准输入读取:\n\n```bash\ncat git.log | npx roux summary\n```\n\n### Thresholds / 阈值\n\n| Flag                           | Description / 说明                                                | Default / 默认值 |\n|--------------------------------|-------------------------------------------------------------------|------------------|\n| `-n, --min-revs <n>`           | Minimum revisions to include entity / 文件最少修改次数            | 5                |\n| `-m, --min-shared-revs <n>`    | Minimum shared revisions for coupling / 耦合分析最少共同修改次数  | 5                |\n| `-i, --min-coupling <n>`       | Minimum coupling percentage / 最低耦合百分比                      | 30               |\n| `-x, --max-coupling <n>`       | Maximum coupling percentage / 最高耦合百分比                      | 100              |\n| `-s, --max-changeset-size <n>` | Ignore commits touching more files / 忽略涉及文件数超过此值的提交 | 30               |\n\nThese thresholds exist to denoise the coupling analyses, and they apply only\nwhere code-maat applies them:\n\n这些阈值用于给耦合分析降噪，作用范围与 code-maat 一致：\n\n| Threshold / 阈值        | Applies to / 作用于                                      |\n|-------------------------|----------------------------------------------------------|\n| `--min-revs`            | `coupling` (on the pair's average), `soc`                |\n| `--min-shared-revs`     | `coupling`                                               |\n| `--min-coupling` / `--max-coupling` | `coupling`                                   |\n| `--max-changeset-size`  | `coupling` only — `soc` counts every changeset           |\n\nDescriptive listings such as `revisions` and `authors` report every entity;\nthey are sorted descending, so low-frequency files sink to the bottom rather\nthan being dropped.\n\n`revisions`、`authors` 这类描述性列表会返回全部条目 — 结果按降序排列，低频文件自然沉底，不会被丢弃。\n\n### Transforms / 数据变换\n\n| Flag                           | Description / 说明                                                     |\n|--------------------------------|------------------------------------------------------------------------|\n| `-g, --group <file>`           | Map files to architectural groups (txt/json/md) / 将文件映射到架构分组 |\n| `-p, --team-map <file>`        | Map authors to teams (csv/json/md) / 将作者映射到团队                  |\n| `-t, --temporal-period <days>` | Sliding window aggregation / 滑动窗口聚合                              |\n\n### Output / 输出\n\n| Flag                             | Description / 说明                                       | Default / 默认值 |\n|----------------------------------|----------------------------------------------------------|------------------|\n| `-r, --rows <n>`                 | Limit output rows / 限制输出行数                         | unlimited / 不限 |\n| `-o, --output-format <fmt>`      | `csv` or `json`                                          | `csv`            |\n| `-d, --age-time-now <date>`      | Reference date for age (YYYY-MM-DD) / age 分析的参考日期 | today / 今天     |\n| `-e, --expression-to-match <re>` | Regex for messages analysis / messages 分析的正则表达式  | —                |\n\n## Log Formats / 日志格式\n\n### git2 (default / 默认)\n\nThe recommended format. Generate with:\n\n推荐格式。生成方式：\n\n```bash\ngit log --all --numstat --date=short \\\n  --pretty=format:'--%h--%ad--%aN--%s' --no-renames > git.log\n```\n\nExample / 示例:\n\n```\n--abc1234--2026-01-15--Alice--Fix parser bug\n12\t4\tsrc/parser.ts\n0\t8\tsrc/old-code.ts\n\n--def5678--2026-01-14--Bob--Add feature\n45\t0\tsrc/feature.ts\n```\n\n### git (legacy / 旧版)\n\nCompatible with code-maat's original git format.\n\n兼容 code-maat 原始 git 格式：\n\n```\n[abc1234] Alice 2026-01-15 Fix parser bug\n12\t4\tsrc/parser.ts\n0\t8\tsrc/old-code.ts\n```\n\nUse `-c git` to select this format. / 使用 `-c git` 选择此格式。\n\n## Transforms / 数据变换\n\n### Architectural Grouping / 架构分组 (`-g`)\n\nGroup files into logical layers for higher-level analysis.\n\n将文件分组到逻辑层，进行更高层次的分析。\n\nSupports TXT, JSON, and Markdown formats (auto-detected by file extension).\n\n支持 TXT、JSON、Markdown 格式（按文件扩展名自动检测）。\n\n**TXT** (`groups.txt`):\n```\nsrc/api     => API Layer\nsrc/ui      => UI Layer\nsrc/models  => Data Layer\n```\n\n**JSON** (`groups.json`):\n```json\n{\n  \"src/api\": \"API Layer\",\n  \"src/ui\": \"UI Layer\",\n  \"^src\\\\/.*Test.*$\": \"Tests\"\n}\n```\n\n**Markdown** (`groups.md`):\n```markdown\n| path | group |\n|------|-------|\n| src/api | API Layer |\n| src/ui | UI Layer |\n| ^src\\/.*Test.*$ | Tests |\n```\n\nRegex patterns are also supported (must start with `^` and end with `$`):\n\n也支持正则表达式（必须以 `^` 开头，以 `$` 结尾）：\n\n```\n^src\\/.*Test.*$ => Tests\n^src\\/((?!.*Test.*).).*$ => Production Code\n```\n\n```bash\nnpx roux coupling -l git.log -g groups.json\n```\n\n### Team Mapping / 团队映射 (`-p`)\n\nMap individual authors to teams for team-level analysis.\n\n将个人作者映射到团队，进行团队级别的分析。\n\nSupports CSV, JSON, and Markdown formats (auto-detected by file extension).\n\n支持 CSV、JSON、Markdown 格式（按文件扩展名自动检测）。\n\n**CSV** (`teams.csv`):\n```csv\nauthor,team\nAlice,Backend\nBob,Backend\nCharlie,Frontend\n```\n\n**JSON** (`teams.json`):\n```json\n{\n  \"Alice\": \"Backend\",\n  \"Bob\": \"Backend\",\n  \"Charlie\": \"Frontend\"\n}\n```\n\n**Markdown** (`teams.md`):\n```markdown\n| author | team |\n|--------|------|\n| Alice | Backend |\n| Bob | Backend |\n| Charlie | Frontend |\n```\n\n```bash\nnpx roux communication -l git.log -p teams.json\n```\n\n### Temporal Coupling / 时间窗口耦合 (`-t`)\n\nAnalyze coupling within sliding time windows.\n\n在滑动时间窗口内分析耦合：\n\n```bash\nnpx roux coupling -l git.log -t 30    # 30-day windows / 30 天窗口\n```\n\n## Programmatic API / 编程接口\n\n```typescript\nimport { analyze, parseGitLog, generateGitLog } from \"roux\";\n\n// Analyze a repo directly with time filters / 直接分析 repo，带时间过滤\nconst result = analyze({\n  analysis: \"coupling\",\n  repo: \"/path/to/repo\",\n  after: \"2024-01-01\",\n  before: \"2025-01-01\",\n});\nconsole.log(result); // CSV string\n\n// Or with revision range / 或使用版本范围\nconst result2 = analyze({\n  analysis: \"revisions\",\n  repo: \"/path/to/repo\",\n  rev: \"v1.0..v2.0\",\n  outputFormat: \"json\",\n});\n\n// Or parse a log file manually / 或手动解析日志文件\nconst log = fs.readFileSync(\"git.log\", \"utf-8\");\nconst mods = parseGitLog(log);\nconst result3 = analyze({ analysis: \"summary\", input: log });\n```\n\n## Development / 开发\n\n```bash\nnpm install\nnpm test              # 94 unit tests / 94 个单元测试\nbash test/acceptance/run.sh   # 101 acceptance tests (requires code-maat) / 101 个验收测试（需要 code-maat）\n```\n\n## License / 许可证\n\nMIT\n","readmeFilename":"README.md"}