{"_id":"@0xsequence/codegenie","_rev":"13-2e0653bc074cd7f996e995f3ff4965f0","name":"@0xsequence/codegenie","dist-tags":{"latest":"0.5.6"},"versions":{"0.1.0":{"name":"@0xsequence/codegenie","version":"0.1.0","license":"MIT","_id":"@0xsequence/codegenie@0.1.0","maintainers":[{"name":"naivesheep","email":"wh@horizongames.net"},{"name":"pkieltyka","email":"pk@horizon.io"},{"name":"agusx1211","email":"agusxrun@gmail.com"},{"name":"taylanpince","email":"taylan@hipolabs.com"},{"name":"milkytaste","email":"screaminghawk@gmail.com"}],"bin":{"codegenie":"./dist/cli/main.js"},"dist":{"shasum":"153cfab0b643f6579718cec81f7ed15839466506","tarball":"https://registry.npmjs.org/@0xsequence/codegenie/-/codegenie-0.1.0.tgz","fileCount":238,"integrity":"sha512-GBD+89UWJS9CVKmLL/Sh1lmOpxsGbyc5mMnATzZcGX2az7jj8eerBjjFrpSwYSgiooaOFqBfd/7Phqi2EBXhTQ==","signatures":[{"sig":"MEYCIQCq63tB6dUZSl+vWvg/H8sLXaYxe4QVD78Lgo5O/Jc7wQIhAKPOtwkGmVFJFfj5EQd4e/0QTBuJPOjRtWQEk5Yvghqf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2593053},"type":"module","engines":{"node":">=22.19.0"},"scripts":{"dev":"tsx src/cli/main.ts","test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest"},"_npmUser":{"name":"pkieltyka","email":"pk@horizon.io"},"description":"High-signal AI code review agent","directories":{},"_nodeVersion":"24.15.0","dependencies":{"zod":"4.4.3","yaml":"2.9.0","execa":"9.6.1","p-limit":"7.3.0","commander":"15.0.0","picomatch":"4.0.4","smol-toml":"1.6.1","tree-sitter-go":"0.25.0","@vscode/ripgrep":"1.18.0","web-tree-sitter":"0.26.9","@earendil-works/pi-ai":"0.79.8","tree-sitter-javascript":"0.25.0","tree-sitter-typescript":"0.23.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.22.4","vitest":"4.1.9","typescript":"6.0.3","@types/node":"26.0.0","@types/picomatch":"4.0.3"},"_npmOperationalInternal":{"tmp":"tmp/codegenie_0.1.0_1782173783864_0.9270569810396099","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@0xsequence/codegenie","version":"0.2.0","license":"MIT","_id":"@0xsequence/codegenie@0.2.0","maintainers":[{"name":"naivesheep","email":"wh@horizongames.net"},{"name":"pkieltyka","email":"pk@horizon.io"},{"name":"agusx1211","email":"agusxrun@gmail.com"},{"name":"taylanpince","email":"taylan@hipolabs.com"},{"name":"milkytaste","email":"screaminghawk@gmail.com"}],"bin":{"codegenie":"./dist/cli/main.js"},"dist":{"shasum":"bce9aa60fc77e2b93b14706cea60317abcf382d0","tarball":"https://registry.npmjs.org/@0xsequence/codegenie/-/codegenie-0.2.0.tgz","fileCount":242,"integrity":"sha512-eUDSl2uddm5rOMp3/SQ4Ff6CZh4SEKOqySL8gpZQ0zFZAQWGXgTuDzxrKKQIAOEXI2GSV9f/6ZdafR3VezjCgQ==","signatures":[{"sig":"MEQCIGRaPfsMjww5JQGdenab67GiBvnjTAasttMZXid31lsfAiAUAdb8+5RqdOPFkKBenfSQUDAzYyQF2fN7i8hg7HouDA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2619859},"type":"module","engines":{"node":">=22.19.0"},"scripts":{"dev":"tsx src/cli/main.ts","test":"vitest run","build":"tsc -p tsconfig.build.json && node scripts/write-version.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest"},"_npmUser":{"name":"pkieltyka","email":"pk@horizon.io"},"description":"High-signal AI code review agent","directories":{},"_nodeVersion":"24.15.0","dependencies":{"zod":"4.4.3","yaml":"2.9.0","execa":"9.6.1","p-limit":"7.3.0","commander":"15.0.0","picomatch":"4.0.4","smol-toml":"1.6.1","tree-sitter-go":"0.25.0","@vscode/ripgrep":"1.18.0","web-tree-sitter":"0.26.9","@earendil-works/pi-ai":"0.79.8","tree-sitter-javascript":"0.25.0","tree-sitter-typescript":"0.23.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.22.4","vitest":"4.1.9","typescript":"6.0.3","@types/node":"26.0.0","@types/picomatch":"4.0.3"},"_npmOperationalInternal":{"tmp":"tmp/codegenie_0.2.0_1782177058216_0.18723452413157182","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@0xsequence/codegenie","version":"0.3.0","license":"MIT","_id":"@0xsequence/codegenie@0.3.0","maintainers":[{"name":"naivesheep","email":"wh@horizongames.net"},{"name":"pkieltyka","email":"pk@horizon.io"},{"name":"agusx1211","email":"agusxrun@gmail.com"},{"name":"taylanpince","email":"taylan@hipolabs.com"},{"name":"milkytaste","email":"screaminghawk@gmail.com"}],"bin":{"codegenie":"./dist/cli/main.js"},"dist":{"shasum":"8fe265e480870406d23ff05526f5671cd6151d69","tarball":"https://registry.npmjs.org/@0xsequence/codegenie/-/codegenie-0.3.0.tgz","fileCount":245,"integrity":"sha512-bdjD7nCw7P7N/n1RA2sV8tPVQCoPgAfU3fn/R3sobGcDfd/Ld+wbszglrgaw+MQ5YO9iN520US3wJ6oRr8BTZw==","signatures":[{"sig":"MEUCIQCnyBvjN9JC2IOzU6CrDy/4V5kqvT6NIovJ0aHW7AcGMAIgZAMSQR+/pdCPgVlsAwv8DKLJXYtoElVmSWFERzuUHOs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2654712},"type":"module","engines":{"node":">=22.19.0"},"scripts":{"dev":"tsx src/cli/main.ts","test":"vitest run","build":"tsc -p tsconfig.build.json && node scripts/write-version.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest"},"_npmUser":{"name":"pkieltyka","email":"pk@horizon.io"},"description":"High-signal AI code review agent","directories":{},"_nodeVersion":"24.15.0","dependencies":{"zod":"4.4.3","yaml":"2.9.0","execa":"9.6.1","p-limit":"7.3.0","commander":"15.0.0","picomatch":"4.0.4","smol-toml":"1.6.1","tree-sitter-go":"0.25.0","@vscode/ripgrep":"1.18.0","web-tree-sitter":"0.26.9","@earendil-works/pi-ai":"0.79.8","tree-sitter-javascript":"0.25.0","tree-sitter-typescript":"0.23.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.22.4","vitest":"4.1.9","typescript":"6.0.3","@types/node":"26.0.0","@types/picomatch":"4.0.3"},"_npmOperationalInternal":{"tmp":"tmp/codegenie_0.3.0_1782351912592_0.04311490426832698","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@0xsequence/codegenie","version":"0.4.0","license":"MIT","_id":"@0xsequence/codegenie@0.4.0","maintainers":[{"name":"naivesheep","email":"wh@horizongames.net"},{"name":"pkieltyka","email":"pk@horizon.io"},{"name":"agusx1211","email":"agusxrun@gmail.com"},{"name":"taylanpince","email":"taylan@hipolabs.com"},{"name":"milkytaste","email":"screaminghawk@gmail.com"}],"bin":{"codegenie":"./dist/cli/main.js"},"dist":{"shasum":"c01bb7659458a4afe2771845407ee2a8d5e2a964","tarball":"https://registry.npmjs.org/@0xsequence/codegenie/-/codegenie-0.4.0.tgz","fileCount":269,"integrity":"sha512-cdtdxd78ORSi4kOQVbSi7cdgpVACpyB1Jmm7RlcDLjB5AJtT8vm246rwI/ACvTnJGjeGkUoVVyA2xV5YDoc0TQ==","signatures":[{"sig":"MEUCIFcOR6lcUZ348LQ6+LGe0vzb8evRcXyTAh3u1Tw10ZYlAiEAxum5j/ebzRKpHZR5ALTvEZWitWI09ASYFpKEJ1+StRY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2835363},"type":"module","engines":{"node":">=22.19.0"},"scripts":{"dev":"tsx src/cli/main.ts","test":"vitest run","build":"tsc -p tsconfig.build.json && node scripts/write-version.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest"},"_npmUser":{"name":"pkieltyka","email":"pk@horizon.io"},"description":"High-signal AI code review agent","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"4.4.3","yaml":"2.9.0","execa":"9.6.1","p-limit":"7.3.0","commander":"15.0.0","picomatch":"4.0.4","smol-toml":"1.7.0","tree-sitter-go":"0.25.0","web-tree-sitter":"0.26.10","@earendil-works/pi-ai":"^0.80.3","tree-sitter-javascript":"0.25.0","tree-sitter-typescript":"0.23.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.22.4","vitest":"4.1.9","typescript":"6.0.3","@types/node":"26.0.1","@types/picomatch":"4.0.3"},"_npmOperationalInternal":{"tmp":"tmp/codegenie_0.4.0_1783301319142_0.5801512528515809","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@0xsequence/codegenie","version":"0.4.1","license":"MIT","_id":"@0xsequence/codegenie@0.4.1","maintainers":[{"name":"naivesheep","email":"wh@horizongames.net"},{"name":"pkieltyka","email":"pk@horizon.io"},{"name":"agusx1211","email":"agusxrun@gmail.com"},{"name":"taylanpince","email":"taylan@hipolabs.com"},{"name":"milkytaste","email":"screaminghawk@gmail.com"}],"bin":{"codegenie":"./dist/cli/main.js"},"dist":{"shasum":"d8f2314d56564ae8f97fee2857d0fbad00174697","tarball":"https://registry.npmjs.org/@0xsequence/codegenie/-/codegenie-0.4.1.tgz","fileCount":269,"integrity":"sha512-gQlI1005v/ioh4zXvm4ZiQeVI1OZ5XRY3jFbSIVDtMIbBksVGkMkf14PX3sRC+X2hIBqwx9pUEIHwGtcWXbocg==","signatures":[{"sig":"MEUCIQCRARnKb5JE/HO4fLRIqYXHKfXsN5MPEgiGJFq1r+iR0AIgYQjjHU+hTVy+xyzTBzOSz05EZNxPY7UkO01nKjJ36oo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2830549},"type":"module","engines":{"node":">=22.19.0"},"scripts":{"dev":"tsx src/cli/main.ts","test":"vitest run","build":"tsc -p tsconfig.build.json && node scripts/write-version.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest"},"_npmUser":{"name":"pkieltyka","email":"pk@horizon.io"},"description":"High-signal AI code review agent","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"4.4.3","yaml":"2.9.0","execa":"9.6.1","p-limit":"7.3.0","commander":"15.0.0","picomatch":"4.0.4","smol-toml":"1.7.0","tree-sitter-go":"0.25.0","web-tree-sitter":"0.26.10","@earendil-works/pi-ai":"^0.80.3","tree-sitter-javascript":"0.25.0","tree-sitter-typescript":"0.23.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.22.4","vitest":"4.1.9","typescript":"6.0.3","@types/node":"26.0.1","@types/picomatch":"4.0.3"},"_npmOperationalInternal":{"tmp":"tmp/codegenie_0.4.1_1783390873886_0.030630893399839598","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@0xsequence/codegenie","version":"0.4.2","license":"MIT","_id":"@0xsequence/codegenie@0.4.2","maintainers":[{"name":"naivesheep","email":"wh@horizongames.net"},{"name":"pkieltyka","email":"pk@horizon.io"},{"name":"agusx1211","email":"agusxrun@gmail.com"},{"name":"taylanpince","email":"taylan@hipolabs.com"},{"name":"milkytaste","email":"screaminghawk@gmail.com"}],"bin":{"codegenie":"./dist/cli/main.js"},"dist":{"shasum":"268002ffe17f7a413cf190c546726da33aed55ae","tarball":"https://registry.npmjs.org/@0xsequence/codegenie/-/codegenie-0.4.2.tgz","fileCount":288,"integrity":"sha512-fQDK+AgIFbqB8DHendHnKvo7qZS0xdrFszXy3BK1FEV/VzTozlbNY/TgqQEBdij+y2uBriMNeUu8QL9ibkJF/w==","signatures":[{"sig":"MEUCIA3dSxOAmrtB80Iy5iV2PjtRqBKsvVaoOSymOKOQXcKCAiEAsyf4k84VLJKfyk8YLX+m2Qz/8QYJ0ImnwqH+PHRGzfk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3029276},"type":"module","engines":{"node":">=22.19.0"},"scripts":{"dev":"tsx src/cli/main.ts","test":"pnpm run check:workflows && vitest run","build":"tsc -p tsconfig.build.json && node scripts/write-version.mjs","check":"pnpm run typecheck && pnpm run check:workflows","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest","models-list":"node scripts/write-models-md.mjs","check:workflows":"bash scripts/check-workflows.sh"},"_npmUser":{"name":"pkieltyka","email":"pk@horizon.io"},"description":"High-signal AI code review agent","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"4.4.3","yaml":"2.9.0","execa":"10.0.0","p-limit":"7.3.0","commander":"15.0.0","picomatch":"4.0.5","smol-toml":"1.7.0","tree-sitter-go":"0.25.0","web-tree-sitter":"0.26.11","@earendil-works/pi-ai":"^0.81.1","tree-sitter-javascript":"0.25.0","tree-sitter-typescript":"0.23.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.1","vitest":"4.1.10","typescript":"7.0.2","@types/node":"26.1.1","@types/picomatch":"4.0.3"},"_npmOperationalInternal":{"tmp":"tmp/codegenie_0.4.2_1784821098604_0.5314241372283992","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@0xsequence/codegenie","version":"0.5.0","license":"MIT","_id":"@0xsequence/codegenie@0.5.0","maintainers":[{"name":"naivesheep","email":"wh@horizongames.net"},{"name":"pkieltyka","email":"pk@horizon.io"},{"name":"agusx1211","email":"agusxrun@gmail.com"},{"name":"taylanpince","email":"taylan@hipolabs.com"},{"name":"milkytaste","email":"screaminghawk@gmail.com"}],"bin":{"codegenie":"./dist/cli/main.js"},"dist":{"shasum":"72b23e47133915ff68a671db5df07cc5182dfac6","tarball":"https://registry.npmjs.org/@0xsequence/codegenie/-/codegenie-0.5.0.tgz","fileCount":304,"integrity":"sha512-1rJZVbt100b64tkxuFWBV/H0TkTGlzeuJmZiAcX41XrvtvVhdC92MP/N8EuXsaJ1YEQOeEBtAzGlsRlIwtSOSA==","signatures":[{"sig":"MEUCIEfibqrFaMEbupFkswSyZTD/W8z9skpkwtvjgzs9soxpAiEAuf1KuTzqyIiFbzbCe54rAZe2pM8/eJ/j91n4N+okgV0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3175948},"type":"module","engines":{"node":">=22.19.0"},"scripts":{"dev":"tsx src/cli/main.ts","test":"pnpm run check:workflows && vitest run","build":"tsc -p tsconfig.build.json && node scripts/write-version.mjs","check":"pnpm run typecheck && pnpm run check:workflows","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest","models-list":"node scripts/write-models-md.mjs","check:workflows":"bash scripts/check-workflows.sh"},"_npmUser":{"name":"pkieltyka","email":"pk@horizon.io"},"description":"High-signal AI code review agent","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"4.4.3","yaml":"2.9.0","execa":"10.0.0","p-limit":"7.3.1","commander":"15.0.0","picomatch":"4.0.5","smol-toml":"1.7.0","tree-sitter-go":"0.25.0","web-tree-sitter":"0.26.11","tree-sitter-rust":"0.24.0","tree-sitter-python":"0.25.0","tree-sitter-solidity":"1.2.13","@earendil-works/pi-ai":"^0.82.1","tree-sitter-javascript":"0.25.0","tree-sitter-typescript":"0.23.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.1","vitest":"4.1.10","typescript":"7.0.2","@types/node":"26.1.1","@types/picomatch":"4.0.3"},"_npmOperationalInternal":{"tmp":"tmp/codegenie_0.5.0_1784990918516_0.26695626462378974","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@0xsequence/codegenie","version":"0.5.1","license":"MIT","_id":"@0xsequence/codegenie@0.5.1","maintainers":[{"name":"naivesheep","email":"wh@horizongames.net"},{"name":"pkieltyka","email":"pk@horizon.io"},{"name":"agusx1211","email":"agusxrun@gmail.com"},{"name":"taylanpince","email":"taylan@hipolabs.com"},{"name":"milkytaste","email":"screaminghawk@gmail.com"}],"bin":{"codegenie":"./dist/cli/main.js"},"dist":{"shasum":"1a8543ac68d30fc141c64be289231f966c9369f3","tarball":"https://registry.npmjs.org/@0xsequence/codegenie/-/codegenie-0.5.1.tgz","fileCount":311,"integrity":"sha512-P4UyTgPcOha4KmhvXDXDHBFRZhZ8UZt8Kgr/gyiburP0J30ZHu62WJS2tSjXYE9LEwofWHYB6hVWHXFMFwMWTQ==","signatures":[{"sig":"MEYCIQDbkl+XWl8MQFtebn/MVJ6dONhPx09UQJcVpURMAHEKAAIhAMTDbZs8GR5nl5C7aP8A6wBNVY4T8NmrNXUcyGicDvYb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8736220},"type":"module","engines":{"node":">=22.19.0"},"scripts":{"dev":"tsx src/cli/main.ts","test":"pnpm run check:workflows && vitest run","build":"tsc -p tsconfig.build.json && node scripts/write-version.mjs && node scripts/copy-grammars.mjs","check":"pnpm run typecheck && pnpm run check:workflows","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest","models-list":"node scripts/write-models-md.mjs","check:workflows":"bash scripts/check-workflows.sh"},"_npmUser":{"name":"pkieltyka","email":"pk@horizon.io"},"description":"High-signal AI code review agent","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"4.4.3","yaml":"2.9.0","execa":"10.0.0","p-limit":"7.3.1","commander":"15.0.0","picomatch":"4.0.5","smol-toml":"1.7.0","web-tree-sitter":"0.26.11","@earendil-works/pi-ai":"^0.82.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.1","vitest":"4.1.10","typescript":"7.0.2","@types/node":"26.1.1","tree-sitter-go":"0.25.0","@types/picomatch":"4.0.3","tree-sitter-rust":"0.24.0","tree-sitter-python":"0.25.0","tree-sitter-solidity":"1.2.13","tree-sitter-javascript":"0.25.0","tree-sitter-typescript":"0.23.2"},"_npmOperationalInternal":{"tmp":"tmp/codegenie_0.5.1_1785101499056_0.5113287672765237","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@0xsequence/codegenie","version":"0.5.2","license":"MIT","_id":"@0xsequence/codegenie@0.5.2","maintainers":[{"name":"naivesheep","email":"wh@horizongames.net"},{"name":"pkieltyka","email":"pk@horizon.io"},{"name":"agusx1211","email":"agusxrun@gmail.com"},{"name":"taylanpince","email":"taylan@hipolabs.com"},{"name":"milkytaste","email":"screaminghawk@gmail.com"}],"bin":{"codegenie":"./dist/cli/main.js"},"dist":{"shasum":"e0d06903761939081517defa2ca919494ab5abd1","tarball":"https://registry.npmjs.org/@0xsequence/codegenie/-/codegenie-0.5.2.tgz","fileCount":314,"integrity":"sha512-heyLkGyj+QkjgaHk3T3Zi/U4H1VgVcG0oqfXIjlJYmZNlAZLeZpJZWDyWqDGqj1pWysJOdE7NdCdz6MLAXmKSQ==","signatures":[{"sig":"MEYCIQDX5kV5hyOrepTaSvWgu5K2+fgSRwYzSsJEMgSwan5IawIhAKPkiNuxZK79EUtvSNIYXApC7rQT7+AJFX3rDWX2Udr2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8748936},"type":"module","engines":{"node":">=22.19.0"},"scripts":{"dev":"tsx src/cli/main.ts","test":"pnpm run check:workflows && vitest run","build":"tsc -p tsconfig.build.json && node scripts/write-version.mjs && node scripts/copy-grammars.mjs","check":"pnpm run typecheck && pnpm run check:workflows","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest","models-list":"node scripts/write-models-md.mjs","check:workflows":"bash scripts/check-workflows.sh"},"_npmUser":{"name":"pkieltyka","email":"pk@horizon.io"},"description":"High-signal AI code review agent","directories":{},"_nodeVersion":"24.18.1","dependencies":{"zod":"4.4.3","yaml":"2.9.0","execa":"10.0.1","p-limit":"7.3.1","commander":"15.0.0","picomatch":"4.0.5","smol-toml":"1.7.1","web-tree-sitter":"0.26.11","@earendil-works/pi-ai":"^0.83.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.1","vitest":"4.1.10","typescript":"7.0.2","@types/node":"26.1.2","tree-sitter-go":"0.25.0","@types/picomatch":"4.0.3","tree-sitter-rust":"0.24.0","tree-sitter-python":"0.25.0","tree-sitter-solidity":"1.2.13","tree-sitter-javascript":"0.25.0","tree-sitter-typescript":"0.23.2"},"_npmOperationalInternal":{"tmp":"tmp/codegenie_0.5.2_1785853545156_0.9426265142905348","host":"s3://npm-registry-packages-npm-production"}},"0.5.3":{"name":"@0xsequence/codegenie","version":"0.5.3","license":"MIT","_id":"@0xsequence/codegenie@0.5.3","maintainers":[{"name":"naivesheep","email":"wh@horizongames.net"},{"name":"pkieltyka","email":"pk@horizon.io"},{"name":"agusx1211","email":"agusxrun@gmail.com"},{"name":"taylanpince","email":"taylan@hipolabs.com"},{"name":"milkytaste","email":"screaminghawk@gmail.com"}],"bin":{"codegenie":"./dist/cli/main.js"},"dist":{"shasum":"96ee93bd229af933a33e8570325ebe27077d4516","tarball":"https://registry.npmjs.org/@0xsequence/codegenie/-/codegenie-0.5.3.tgz","fileCount":317,"integrity":"sha512-gnoX5/1yoywc02OotU4RhcgXCs4R6jf/ibLlduf26kTaC0x5EUud0wdnGWAGgHhCGEu60QX10PKoulAO2XB7Xw==","signatures":[{"sig":"MEUCIFQTkZTrnTANPtbzpo0Mku/0BFnlk7jSZhRKMu7QRF/xAiEAhY/Wg2amh5GZH7bz78EjWGIv78Sl2huHoiU0p0fLZr8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8761523},"type":"module","engines":{"node":">=22.19.0"},"scripts":{"dev":"tsx src/cli/main.ts","test":"pnpm run check:workflows && vitest run","build":"tsc -p tsconfig.build.json && node scripts/write-version.mjs && node scripts/copy-grammars.mjs","check":"pnpm run typecheck && pnpm run check:workflows","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest","models-list":"node scripts/write-models-md.mjs","check:workflows":"bash scripts/check-workflows.sh"},"_npmUser":{"name":"pkieltyka","email":"pk@horizon.io"},"description":"High-signal AI code review agent","directories":{},"_nodeVersion":"24.18.1","dependencies":{"zod":"4.4.3","yaml":"2.9.0","execa":"10.0.1","p-limit":"7.3.1","commander":"15.0.0","picomatch":"4.0.5","smol-toml":"1.7.1","web-tree-sitter":"0.26.11","@earendil-works/pi-ai":"^0.83.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.1","vitest":"4.1.10","typescript":"7.0.2","@types/node":"26.1.2","tree-sitter-go":"0.25.0","@types/picomatch":"4.0.3","tree-sitter-rust":"0.24.0","tree-sitter-python":"0.25.0","tree-sitter-solidity":"1.2.13","tree-sitter-javascript":"0.25.0","tree-sitter-typescript":"0.23.2"},"_npmOperationalInternal":{"tmp":"tmp/codegenie_0.5.3_1785873333803_0.8986121372836273","host":"s3://npm-registry-packages-npm-production"}},"0.5.4":{"name":"@0xsequence/codegenie","version":"0.5.4","license":"MIT","_id":"@0xsequence/codegenie@0.5.4","maintainers":[{"name":"naivesheep","email":"wh@horizongames.net"},{"name":"pkieltyka","email":"pk@horizon.io"},{"name":"agusx1211","email":"agusxrun@gmail.com"},{"name":"taylanpince","email":"taylan@hipolabs.com"},{"name":"milkytaste","email":"screaminghawk@gmail.com"}],"bin":{"codegenie":"./dist/cli/main.js"},"dist":{"shasum":"2a83c45e5d2425ba0bf9030fa229ff1a47f79d71","tarball":"https://registry.npmjs.org/@0xsequence/codegenie/-/codegenie-0.5.4.tgz","fileCount":317,"integrity":"sha512-YhvUMwUazUgJM5/Aibekf5vB4vgm5iqns+4Jr+6jyGAsYGmVnITnbV7t02/kkUM8ulQIN14oCj6VdBZ3IF2cCw==","signatures":[{"sig":"MEUCIDF8T1r/UNfx1ab5IdKO0xwMC5CqgOCHMacLZ/4iUTR+AiEAoZMN0UE10LnHJtZMQR1ugRAT1mzEfAcXZHLdHuQgL0g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8801569},"type":"module","engines":{"node":">=22.19.0"},"scripts":{"dev":"tsx src/cli/main.ts","test":"pnpm run check:workflows && vitest run","build":"tsc -p tsconfig.build.json && node scripts/write-version.mjs && node scripts/copy-grammars.mjs","check":"pnpm run typecheck && pnpm run check:workflows","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest","models-list":"node scripts/write-models-md.mjs","check:workflows":"bash scripts/check-workflows.sh"},"_npmUser":{"name":"pkieltyka","email":"pk@horizon.io"},"description":"High-signal AI code review agent","directories":{},"_nodeVersion":"24.18.1","dependencies":{"zod":"4.4.3","yaml":"2.9.0","execa":"10.0.1","p-limit":"7.3.1","commander":"15.0.0","picomatch":"4.0.5","smol-toml":"1.7.1","web-tree-sitter":"0.26.11","@earendil-works/pi-ai":"^0.83.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.1","vitest":"4.1.10","typescript":"7.0.2","@types/node":"26.1.2","tree-sitter-go":"0.25.0","@types/picomatch":"4.0.3","tree-sitter-rust":"0.24.0","tree-sitter-python":"0.25.0","tree-sitter-solidity":"1.2.13","tree-sitter-javascript":"0.25.0","tree-sitter-typescript":"0.23.2"},"_npmOperationalInternal":{"tmp":"tmp/codegenie_0.5.4_1785939171952_0.02393693316232204","host":"s3://npm-registry-packages-npm-production"}},"0.5.5":{"name":"@0xsequence/codegenie","version":"0.5.5","license":"MIT","_id":"@0xsequence/codegenie@0.5.5","maintainers":[{"name":"naivesheep","email":"wh@horizongames.net"},{"name":"pkieltyka","email":"pk@horizon.io"},{"name":"agusx1211","email":"agusxrun@gmail.com"},{"name":"taylanpince","email":"taylan@hipolabs.com"},{"name":"milkytaste","email":"screaminghawk@gmail.com"}],"bin":{"codegenie":"./dist/cli/main.js"},"dist":{"shasum":"f7929f9afed74b164ae8a40b2b60c8c602c8cb48","tarball":"https://registry.npmjs.org/@0xsequence/codegenie/-/codegenie-0.5.5.tgz","fileCount":323,"integrity":"sha512-Vv0V8YDIA49AN98qYyQc/pMpZ328FekCllSs6+o7mUpSTMxFFMCku2gPgaY0o5ytJNMA8tR2zgTlQ2FdBLGV+g==","signatures":[{"sig":"MEUCIDhwvs9ZVmHYGsm7x4twq6FGZ+17u0PD7uC/pcuVoDr3AiEApmpNW7uJx5Et3KjcH4OGREWwa1ZUOk0P7W4trk5sEWs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8874057},"type":"module","engines":{"node":">=22.19.0"},"scripts":{"dev":"tsx src/cli/main.ts","test":"pnpm run check:workflows && vitest run","build":"tsc -p tsconfig.build.json && node scripts/write-version.mjs && node scripts/copy-grammars.mjs","check":"pnpm run typecheck && pnpm run check:workflows","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest","models-list":"node scripts/write-models-md.mjs","check:workflows":"bash scripts/check-workflows.sh"},"_npmUser":{"name":"pkieltyka","email":"pk@horizon.io"},"description":"High-signal AI code review agent","directories":{},"_nodeVersion":"24.18.1","dependencies":{"zod":"4.4.3","yaml":"2.9.0","execa":"10.0.1","p-limit":"7.3.1","commander":"15.0.0","picomatch":"4.0.5","smol-toml":"1.7.1","web-tree-sitter":"0.26.11","@earendil-works/pi-ai":"^0.83.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.4","vitest":"4.1.10","typescript":"7.0.2","@types/node":"26.1.2","tree-sitter-go":"0.25.0","@types/picomatch":"4.0.3","tree-sitter-rust":"0.24.0","tree-sitter-python":"0.25.0","tree-sitter-solidity":"1.2.13","tree-sitter-javascript":"0.25.0","tree-sitter-typescript":"0.23.2"},"_npmOperationalInternal":{"tmp":"tmp/codegenie_0.5.5_1785961879354_0.1897008488259364","host":"s3://npm-registry-packages-npm-production"}},"0.5.6":{"name":"@0xsequence/codegenie","version":"0.5.6","description":"High-signal AI code review agent","type":"module","bin":{"codegenie":"./dist/cli/main.js"},"engines":{"node":">=22.19.0"},"license":"MIT","dependencies":{"@earendil-works/pi-ai":"^0.84.4","commander":"15.0.0","execa":"10.0.1","p-limit":"7.3.1","picomatch":"4.0.7","smol-toml":"1.8.0","web-tree-sitter":"0.26.13","yaml":"2.9.0","zod":"4.5.1"},"devDependencies":{"@types/node":"26.4.0","@types/picomatch":"4.0.3","tree-sitter-go":"0.25.0","tree-sitter-javascript":"0.25.0","tree-sitter-python":"0.25.0","tree-sitter-rust":"0.24.0","tree-sitter-solidity":"1.2.13","tree-sitter-typescript":"0.23.2","tsx":"4.23.12","typescript":"7.0.2","vitest":"4.1.11"},"scripts":{"build":"tsc -p tsconfig.build.json && node scripts/write-version.mjs && node scripts/copy-grammars.mjs","typecheck":"tsc -p tsconfig.json --noEmit","check:workflows":"bash scripts/check-workflows.sh","check":"pnpm run typecheck && pnpm run check:workflows","test":"pnpm run check:workflows && vitest run","test:watch":"vitest","models-list":"node scripts/write-models-md.mjs","dev":"tsx src/cli/main.ts"},"_nodeVersion":"24.19.0","_id":"@0xsequence/codegenie@0.5.6","dist":{"integrity":"sha512-lPFj1HD7KZhyky2NEjbv92fAHOU7u5o9LnYmoPxmhq66g07yGTS6mI3fzQaSDXkOUW/88Dy4o5aC33d6g52MZw==","shasum":"9c00710c2d5fa6b4b2a02119c224f39b7e2945a9","tarball":"https://registry.npmjs.org/@0xsequence/codegenie/-/codegenie-0.5.6.tgz","fileCount":326,"unpackedSize":8889720,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEUYveR7CbYfz58F0Fkx2UzD1HLEUUlG7w/C5NDAkKhQAiBVvbh898qV2B+MKGDf5IdYLt4E5zZAhdwJ6E2USrRUwQ=="}]},"_npmUser":{"name":"pkieltyka","email":"pk@horizon.io"},"directories":{},"maintainers":[{"name":"naivesheep","email":"wh@horizongames.net"},{"name":"pkieltyka","email":"pk@horizon.io"},{"name":"agusx1211","email":"agusxrun@gmail.com"},{"name":"taylanpince","email":"taylan@hipolabs.com"},{"name":"milkytaste","email":"screaminghawk@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/codegenie_0.5.6_1788267920927_0.1443737125942519"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-23T00:16:23.718Z","modified":"2026-09-01T13:05:21.328Z","0.1.0":"2026-06-23T00:16:24.051Z","0.2.0":"2026-06-23T01:10:58.433Z","0.3.0":"2026-06-25T01:45:12.809Z","0.4.0":"2026-07-06T01:28:39.298Z","0.4.1":"2026-07-07T02:21:14.047Z","0.4.2":"2026-07-23T15:38:18.779Z","0.5.0":"2026-07-25T14:48:38.716Z","0.5.1":"2026-07-26T21:31:39.232Z","0.5.2":"2026-08-04T14:25:45.331Z","0.5.3":"2026-08-04T19:55:34.000Z","0.5.4":"2026-08-05T14:12:52.138Z","0.5.5":"2026-08-05T20:31:19.592Z","0.5.6":"2026-09-01T13:05:21.135Z"},"license":"MIT","description":"High-signal AI code review agent","maintainers":[{"name":"naivesheep","email":"wh@horizongames.net"},{"name":"pkieltyka","email":"pk@horizon.io"},{"name":"agusx1211","email":"agusxrun@gmail.com"},{"name":"taylanpince","email":"taylan@hipolabs.com"},{"name":"milkytaste","email":"screaminghawk@gmail.com"}],"readme":"# codegenie 🧞\n\n**AI code review harness.** codegenie is a TypeScript CLI that reviews PR-style diffs at a staff-engineer level — real bugs, logic errors, security issues, architectural risks, and missing tests — and avoids wasting your attention on nitpicks. It prefers no comments over weak comments. codegenie supports all popular LLM providers.\n\nIt is not a chatbot pointed at a diff. It is a multi-staged code review harness: a staged pipeline where deterministic code owns the guarantees (coverage, anchoring, verification, dedup, budgets, telemetry) and LLM agents do the judgment work inside each stage. codegenie is built on pi AI library and tree-sitter language parser to offer the harness more powerful tools to traverse code more efficiently.\n\n## Install\n\n```bash\nnpm install -g @0xsequence/codegenie   # or: bun install -g @0xsequence/codegenie\n```\n\nOr run without installing: `npx @0xsequence/codegenie --help`\n\n> Note: the npm package will move out of the `@0xsequence` scope in the future.\n\n## Quick start\n\n```bash\n# 1. Connect a model provider (pick one)\ncodegenie provider login anthropic --api-key   # Anthropic API key\ncodegenie provider login openai-codex          # ChatGPT plan (browser OAuth)\ncodegenie provider login openai --api-key      # OpenAI API key\n\n# 2. Pick your default model (fuzzy-matched)\ncodegenie provider use opus       # -> anthropic/claude-opus-5\ncodegenie provider use gpt-5.5    # -> openai-codex/gpt-5.5\n\n# 3. Review your current branch\ncodegenie review\n```\n\nThe report prints to stdout as Markdown. A review with findings is a *successful* review: the exit code is `0` either way.\n\n## Reviewing\n\n```bash\ncodegenie review                            # current branch vs its base (merge-base semantics)\ncodegenie review --pr 123                   # a GitHub PR — no checkout needed, fork PRs included\ncodegenie review feat                       # branch vs resolved base\ncodegenie review --branch feat --base main\ncodegenie review master...49f4645b          # shorthand for --base master --head 49f4645b\ncodegenie review abc1234                    # one commit\ncodegenie review abc1234 def5678            # a commit range\n```\n\nA single positional target is branch-first: if it resolves as a branch, codegenie reviews it against its base; otherwise it is treated as a single commit.\n\nFirst-class syntax context and default language guidance currently cover Go, TypeScript, JavaScript, Rust, Python, and Solidity. JavaScript has its own `lang/javascript` guidance for runtime semantics; `.js`, `.jsx`, `.mjs`, and `.cjs` share the proven ECMAScript adapter implementation without inheriting TypeScript-only checks. JavaScript CommonJS export inference, Flow/JSDoc semantic typing, unsupported proposal syntax, and framework/bundler semantics remain deferred. Solidity packets include contract-owned methods/types/events/errors/state values, source-only imports, overload-safe declaration identity, and deterministic default Foundry test links only when a nearest `foundry.toml` exists. File-level constants are not value symbols. Solidity storage-layout, generated-getter, ABI/export analysis, custom Foundry directories, and Hardhat TypeScript linking remain deferred; Solidity symbols intentionally leave `exported` unset. Python `.pyi` stubs/custom collection and Rust same-file/arbitrary integration-test discovery also remain deferred.\n\nRust, Python, and Solidity form one language-inventory unit. Their three default-enabled skills intentionally change the global Stage-5 skill inventory, registry hash, and model-call cache identity. That single external measurement boundary occurred when the complete Phase 1-4 inventory reached `origin/next` at `eb20533`; measurements from before and after that revision are not comparable as the same cache/prompt regime. The later Phase-5 gate at `40b87b0` changes validation, packaging policy, fixtures, tests, and documentation but not the bundled-skill inventory or registry hash. A branch push is not an npm/tagged release: `master`, the latest tag, and npm `latest` remain at `v0.4.2` until an explicit release occurs.\n\nThe dedicated JavaScript skill and narrowed TypeScript skill create a second intentional Stage-5 inventory/registry/cache boundary at the revision where this complete Phase-6 unit first becomes externally visible. Measurements across that landing are non-comparable prompt/cache regimes. A local implementation or branch push remains distinct from a master merge, tag, npm publication, or GitHub release.\n\nCommon options:\n\n```bash\ncodegenie review --depth light|normal|deep         # review budget & planner bias\ncodegenie review --lens lang/go --lens core/tests  # restrict lenses for this run\ncodegenie review --provider anthropic --model claude-opus-5   # one-run model override\ncodegenie review --reasoning high                  # low | medium | high | xhigh | auto\ncodegenie review --format json                     # machine-readable review object\ncodegenie review --pr 123 --post-github-comments   # publish inline comments (explicit flag, never config)\n```\n\nPosting to GitHub is a single `COMMENT`-type review with inline comments anchored to changed lines — it never approves or requests changes, and only happens when you pass the flag. Interactive runs show a stderr progress spinner (auto-disabled in CI; `--no-progress` disables it explicitly). Non-posting Markdown/JSON runs emit the full report to stdout; posting runs emit a concise posting summary instead. Action mode separately renders the full report into the status comment, step summary, and report artifact.\n\n## GitHub Action\n\ncodegenie ships as a reusable GitHub Action: reviews run automatically on PR open/update, or on demand when a collaborator comments `codegenie review` on a PR. The run posts a single status comment (\"Reviewing ...\") that live-updates through the pipeline stages and finishes as the full markdown report; inline finding comments post as a PR review alongside it (on by default, `post-inline-comments: \"false\"` disables).\n\n```yaml\n# .github/workflows/codegenie.yml\nname: codegenie review\non:\n  pull_request:\n    types: [opened, synchronize, ready_for_review]\npermissions:\n  contents: read\n  pull-requests: write\n  issues: write\nconcurrency:\n  group: codegenie-review-pr-${{ github.event.pull_request.number }}\n  cancel-in-progress: true  # newest event wins; a push supersedes the stale review\njobs:\n  review:\n    runs-on: ubuntu-latest\n    timeout-minutes: 45\n    steps:\n      - uses: actions/checkout@v7\n        with:\n          ref: ${{ github.event.pull_request.base.sha }}  # trusted base; PR head is fetched as review data\n          fetch-depth: 0\n      - uses: 0xPolygon/codegenie@v0.5.6\n        with:\n          model: \"anthropic/claude-opus-5:high\"\n          llm-api-key: ${{ secrets.LLM_API_KEY }}\n```\n\nThe `model` input is one spec: `provider/model[:reasoning]` — any model in [models.md](./models.md) works (`openai/gpt-5.5:xhigh`, `google/gemini-3-pro`, ...), with reasoning defaulting to `high`. `llm-api-key` is provider-generic: codegenie routes it to whatever variable the named provider reads. Provider-native env vars (`ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, ...) also work and take precedence if you already keep secrets under those names.\n\nSee `examples/workflows/` for both trigger lanes (automatic and comment-triggered). All authorization — exact trigger-phrase match, live write-permission check — happens inside codegenie; the workflows contain no gating logic to drift. Cancellation policy is one rule: `cancel-in-progress: true`, newest event wins — a push supersedes the now-stale review. On the comment lane that also means any comment on a PR supersedes that PR's in-flight run before codegenie decides it's a skip; if your PR threads are chatty, set it to `false` there (re-triggers queue instead), or gate a separate ungrouped job with the `preflight-only` input for the strictest setup. Fork `pull_request` events skip cleanly (the comment lane serves fork PRs), and all posting is deterministic harness code — reviewed content and comment text never reach the model as instructions or tools. Costs are the usual two: GitHub Actions minutes and provider tokens.\n\n## Providers and models\n\n```bash\ncodegenie provider list                  # known providers and auth status\ncodegenie provider login <provider>      # OAuth by default; --api-key to store a key\ncodegenie provider models [query]        # list available models (e.g. `models gpt`)\ncodegenie provider use <model>           # set the default by fuzzy model id\n```\n\nThe full list of supported models — every provider, model id, context window, and reasoning levels — lives in [models.md](./models.md) (generated from the [models.dev](https://models.dev) registry; regenerate with `make models-list`).\n\n`provider use` fuzzy-matches: `use opus`, `use sonnet`, `use gpt-5.5` all resolve to a concrete provider/model pair and print what they picked. Credentials and defaults live under `~/.codegenie/`, never in the repository. Supported lanes include Anthropic (API key) and OpenAI via both the API and ChatGPT-plan Codex OAuth — all on each provider's current APIs.\n\n## Configuration\n\nDrop a `codegenie.toml` in your repo root. Everything has sensible defaults; a typical config is small:\n\n```toml\n[git]\nbaseBranch = \"main\"\n\n[review]\ndepth = \"normal\"\nmaxTime = 60        # positive number of minutes; --max-time overrides this per run\nbudgetBoost = 1.0   # scales per-packet review budgets; does not change finding caps\n\n[telemetry]\nenabled = true      # opt into local run artifacts under .codegenie/runs\n\n[[classification.pathRules]]\npattern = \"lib/payments/**\"\nreviewPriority = \"critical\"\nlabels = [\"payments\"]\n\n[[classification.pathRules]]\npattern = \"generated/**\"\nprocessingMode = \"skip\"\n```\n\n- **Telemetry is off by default.** Repo config may only set `telemetry.enabled`; user-level `~/.codegenie/config.toml` can also set run directory, log level, and retention.\n- **Skills travel with the repo.** Teams can version project-specific review expertise as Markdown skills in `.codegenie/skills/` — concrete checks, false-positive rules, and safe patterns.\n- **Budgets are dispatch controls, not mid-call interrupts.** `review.maxTime` defaults to 30 minutes and may be set in repo or user config; `--max-time <minutes>` is the final per-run override. Crossing a soft cap lets in-flight work finish, records the overrun, and stops dispatching non-essential work.\n\n## How a review runs\n\nEleven stages, each with a telemetry and artifact boundary. Five make LLM calls (shaded); everything else is deterministic code — and the deterministic stages own the guarantees.\n\n```mermaid\nflowchart TB\n    S1[\"1 · Resolve input<br/>PR / branch / commits → base, head, diff\"]\n    S2[\"2 · Parse & filter diff<br/>skip generated / vendor / binary\"]\n    S3[\"3 · Classify files<br/>language, test vs source, priority\"]\n    S4[\"4 · Index symbols<br/>tree-sitter parse, static signals\"]\n    S5([\"5 · Plan (LLM)<br/>intent, coverage depth, lenses\"])\n    S6[\"6 · Build review packets<br/>hunks + symbols + tests + context\"]\n    S7([\"7 · Review packets (LLM × packet)<br/>parallel, read-only repo tools\"])\n    S8([\"8 · Follow-up (LLM, usually skipped)\"])\n    S9([\"9 · Verify (LLM × candidate)<br/>fresh context, never sees reviewer reasoning\"])\n    S10([\"10 · Compose (LLM)<br/>merge, rank, cap, phrase\"])\n    S11[\"11 · Publish<br/>stdout / JSON / optional GitHub comments\"]\n\n    S1 --> S2 --> S3 --> S4 --> S5 --> S6 --> S7\n    S7 --> S9\n    S7 -. \"repeated scoped questions only\" .-> S8 --> S9\n    S9 --> S10 --> S11\n\n    classDef llm fill:#fdf3d8,stroke:#c8963e,color:#5b4a1e;\n    class S5,S7,S8,S9,S10 llm;\n```\n\n| # | Stage | What it does | LLM calls |\n|---|-------|--------------|-----------|\n| 1 | Resolve input | Turn `--pr` / branch / commit args into trusted base+head revisions and the raw diff. | — |\n| 2 | Parse & filter | Parse the unified diff; skip generated/vendor/lock/binary files; short-circuit zero-work runs. | — |\n| 3 | Classify | Assign language, test-vs-source status, review priority, and path-rule labels. | — |\n| 4 | Index | Build the symbol index (tree-sitter), extract changed-symbol facts and static risk signals. | — |\n| 5 | Plan | Decide intent framing, per-hunk coverage depth, and lenses. Doesn't hunt bugs. | 1 |\n| 6 | Build packets | Assemble focused packets: changed hunks, enclosing symbols, file outline, likely tests, bounded related context. | — |\n| 7 | Review | Parallel reviewers examine each packet with read-only repo tools (`read_symbol`, `find_definition`, …) and return candidate findings + uncertainties. | 1 per packet |\n| 8 | Follow up | Runs only when several packets independently raise the same scoped question; most runs skip it. | 0–few |\n| 9 | Verify | Every candidate is independently re-examined in a fresh context that never saw the reviewer's reasoning. | 1 per candidate |\n| 10 | Compose | Dedupe and merge same-root-cause findings, rank, cap, and phrase the final review. | 1 |\n| 11 | Publish | Write stdout/JSON; post GitHub comments only with the explicit flag. | — |\n\nThe unit of review is the changed hunk; the unit of understanding is the affected system. Reviewers don't get the repository dumped into context — they get a compact packet plus tools to pull exactly what a concern depends on, within per-packet budgets.\n\n## Design and philosophy\n\n**Judgment in the model, invariants in the harness.** codegenie has four primary LLM decision points — planner, reviewer, verifier, composer — and everything else is deterministic plumbing. A fully autonomous agent is one decision point making hundreds of unauditable micro-decisions; we'd rather have a few auditable ones. The value of a review tool isn't \"finds bugs\" (frontier models do that for free) — it's the guarantees around the findings:\n\n- **Coverage honesty.** Every hunk gets a decision or a disclosed skip reason. An autonomous agent cannot tell you what it *didn't* look at.\n- **Independent verification.** Verifiers never see the reviewer's reasoning, so they can't anchor on it — that separation only exists because the workflow enforces it.\n- **Diagnosable quality.** Typed artifacts between stages mean every miss is attributable: missed at generation, killed at verification, deduped, or cut by the cap. An end-to-end agent tells you *that* it missed; a staged harness tells you *why*.\n- **Precision economics.** One wrong comment posted publicly burns trust fast. Autonomy optimizes exploration; a review product needs precision enforced in code.\n\nAutonomy still lives where it earns its keep — *inside* the stages, where reviewers and verifiers investigate with tools, within budgets. **Policy by model, invariants by code.**\n\n**Deterministic first.** Everything that can be deterministic is: diff parsing, classification, symbol extraction, packet construction, anchoring, fingerprinting, caps. Tree-sitter is the cross-language syntax substrate, treated as *syntactic evidence, not semantic truth* — tool results carry backend and precision provenance so a reviewer knows how much to trust what it read.\n\n**Focused context beats big context.** A model handed a 100k-token diff reviews everything a little and nothing well. Small dense packets plus targeted tools invert that.\n\n**Skills are checks, not personas.** A skill is a Markdown file of concrete checks, false-positive rules, safe patterns, and examples — not \"you are a meticulous senior engineer\" theater. Guidance is projected per stage so it lands where it changes behavior.\n\n**Built to be evaluated.** With telemetry enabled, every run writes typed artifacts — plan, packets, candidates, verdicts, selections, budgets, per-call cost. `codegenie eval` replays real repos against expected findings and scores misses *by loss stage*. The eval suite, the skills, and the telemetry are the compounding assets — models swap underneath them.\n\n**Reviewing untrusted code is a security problem.** A PR is attacker-controlled input flowing into tool-equipped LLMs whose output gets posted publicly. Untrusted content is structurally delimited as data-not-instructions; tools enforce repo-root containment; repo config can never enable command execution or posting; comments pass deterministic sanitization before posting.\n\n**Fail honestly, degrade predictably.** A failed planner falls back to a deterministic plan; a failed packet marks its hunks in coverage; budget exhaustion stops future dispatch without discarding completed work. Partial reviews exit `0` and *say they're partial*.\n\n**Build when evidence demands it.** Richer designs (hierarchical planning, per-role model tiering, cross-packet indexes) are specified but deferred behind written triggers — machinery is added when telemetry shows it improves review quality, never speculatively.\n\n## Development\n\nRun `pnpm run check` for TypeScript and GitHub workflow validation, then `pnpm test` and `pnpm build` for the full suite. Workflow validation uses [`actionlint`](https://github.com/rhysd/actionlint); `pnpm test` runs it automatically so GitHub expression/context errors cannot pass while unit tests remain green.\n\n## Status\n\ncodegenie is a pre-1.0 CLI being hardened through live evals. Full specifications live in [`specs/project/`](specs/project/):\n\n- [`project_overview.md`](specs/project/project_overview.md) — goals and shape\n- [`functional_spec.md`](specs/project/functional_spec.md) — behavior, stages, contracts\n- [`architecture.md`](specs/project/architecture.md) — components, data model, technology choices\n\nBuilt with TypeScript, [`@earendil-works/pi-ai`](https://www.npmjs.com/package/@earendil-works/pi-ai), web-tree-sitter, and `git`/`gh` as the only external CLI dependencies.\n","readmeFilename":""}