{"_id":"@eldenring/ai-review","_rev":"22-0c458526e0722c3557b32222d9b54604","name":"@eldenring/ai-review","dist-tags":{"latest":"0.6.6"},"versions":{"0.1.1":{"name":"@eldenring/ai-review","version":"0.1.1","keywords":["codeup","ai","code-review","deepseek"],"license":"MIT","_id":"@eldenring/ai-review@0.1.1","maintainers":[{"name":"eldenring","email":"601167822@qq.com"}],"bin":{"ai-review":"bin/ai-review.js"},"dist":{"shasum":"2da461477264e9e3510d84ea94fec4476d0cfdcc","tarball":"https://registry.npmjs.org/@eldenring/ai-review/-/ai-review-0.1.1.tgz","fileCount":179,"integrity":"sha512-bu1KHDnZlp+PWHb1P1lnL0Sy0QDcCceTasY8ebBI4nhRlNpZOCkWPISZO0n47cdBPIu5z7b9qNPygiBpOFkBVg==","signatures":[{"sig":"MEQCIHfxWOyUDsJKwn9QOpJl8NJqRu+igiP5Lkvqo3ydrHhEAiBMgw8CwXtTyXbMSyYMoXI1ljFLJXTu/kK8rl/QpKW8jQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":342405},"main":"dist/app.js","type":"module","types":"dist/app.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/app.d.ts","import":"./dist/app.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"4419ec627530170cdf2ccc8cd3f59e482d7e5c4f","scripts":{"dev":"tsx watch src/app.ts","lint":"eslint . --ext .ts","build":"tsc -p tsconfig.json","start":"node dist/app.js","format":"prettier --write .","prepare":"node scripts/prepare.mjs","lint:fix":"eslint . --ext .ts --fix","ai:review":"tsx src/cli.ts","typecheck":"tsc --noEmit","format:check":"prettier --check .","prepublishOnly":"npm run build"},"_npmUser":{"name":"eldenring","email":"601167822@qq.com"},"repository":{"url":"https://codeup.aliyun.com/6868ea39874c52f1221c4b89/PR_Agent.git","type":"git"},"_npmVersion":"10.4.0","description":"接入阿里云 Codeup 的 AI 代码审查机器人","directories":{},"_nodeVersion":"22.19.0","dependencies":{"zod":"^3.23.8","pino":"^9.5.0","axios":"^1.7.7","dotenv":"^16.6.1","express":"^4.21.1","pino-http":"^10.3.0","@cursor/sdk":"^1.0.19","@vscode/ripgrep":"^1.18.0","@connectrpc/connect-node":"^1.6.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","husky":"^9.1.6","eslint":"^8.57.1","prettier":"^3.3.3","typescript":"^5.6.3","@types/node":"^22.7.5","pino-pretty":"^11.3.0","@types/express":"^4.17.21","@commitlint/cli":"^19.5.0","eslint-config-prettier":"^9.1.0","@typescript-eslint/parser":"^8.8.1","@commitlint/config-conventional":"^19.5.0","@typescript-eslint/eslint-plugin":"^8.8.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-review_0.1.1_1782372878679_0.09486159737874145","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@eldenring/ai-review","version":"0.1.2","keywords":["codeup","ai","code-review","deepseek"],"license":"MIT","_id":"@eldenring/ai-review@0.1.2","maintainers":[{"name":"eldenring","email":"601167822@qq.com"}],"bin":{"ai-review":"bin/ai-review.js"},"dist":{"shasum":"d1d6fe7b9834a630520ee6e1cbefab89cdf56f0f","tarball":"https://registry.npmjs.org/@eldenring/ai-review/-/ai-review-0.1.2.tgz","fileCount":185,"integrity":"sha512-1774A1cJ3QxpC2AHMOLkeCipTpaqpJA5iVK1Lh9Sr1LeM9n9bqtYiWYvClh8aj1IaG//PbNa9PHDYjuC6nGiVg==","signatures":[{"sig":"MEQCIFQlX69KFJYiN1KNb1LDLm9CeyBJxK1L08MBX5wHPbk6AiBylF1MExgaGbtur6uxOtQvW/zEFkvcccJUBBssL6bqeg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":390731},"main":"dist/app.js","type":"module","types":"dist/app.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/app.d.ts","import":"./dist/app.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"ab006a166d951088277542eff36dc1a09e08ff63","scripts":{"dev":"tsx watch src/app.ts","lint":"eslint . --ext .ts","build":"tsc -p tsconfig.json","start":"node dist/app.js","format":"prettier --write .","prepare":"node scripts/prepare.mjs","lint:fix":"eslint . --ext .ts --fix","ai:review":"tsx src/cli.ts","typecheck":"tsc --noEmit","format:check":"prettier --check .","prepublishOnly":"npm run build"},"_npmUser":{"name":"eldenring","email":"601167822@qq.com"},"repository":{"url":"https://codeup.aliyun.com/6868ea39874c52f1221c4b89/PR_Agent.git","type":"git"},"_npmVersion":"10.4.0","description":"接入阿里云 Codeup 的 AI 代码审查机器人","directories":{},"_nodeVersion":"22.19.0","dependencies":{"zod":"^3.23.8","pino":"^9.5.0","axios":"^1.7.7","dotenv":"^16.6.1","express":"^4.21.1","pino-http":"^10.3.0","@cursor/sdk":"^1.0.19","@vscode/ripgrep":"^1.18.0","@connectrpc/connect-node":"^1.6.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","husky":"^9.1.6","eslint":"^8.57.1","prettier":"^3.3.3","typescript":"^5.6.3","@types/node":"^22.7.5","pino-pretty":"^11.3.0","@types/express":"^4.17.21","@commitlint/cli":"^19.5.0","eslint-config-prettier":"^9.1.0","@typescript-eslint/parser":"^8.8.1","@commitlint/config-conventional":"^19.5.0","@typescript-eslint/eslint-plugin":"^8.8.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-review_0.1.2_1782394758355_0.3493827902233688","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@eldenring/ai-review","version":"0.2.0","keywords":["codeup","ai","code-review","deepseek"],"license":"MIT","_id":"@eldenring/ai-review@0.2.0","maintainers":[{"name":"eldenring","email":"601167822@qq.com"}],"bin":{"ai-review":"bin/ai-review.js"},"dist":{"shasum":"8e002863278134383bc9faa05d3a40c152599b3d","tarball":"https://registry.npmjs.org/@eldenring/ai-review/-/ai-review-0.2.0.tgz","fileCount":191,"integrity":"sha512-7uzAiifIwj12iic3SO0H6xn1bNrKHnoDm2sqAxjDbr2esTUnzTzLfnRL3QjyZygTAnTeWsi/Y2lm04x6KiC/2A==","signatures":[{"sig":"MEQCIEa53zJW4aJNkwziDvYkfNX333t+xJZvolHQRTTcU/BaAiB/RxIhkfdYao9+qhhcVJS8gIOd7uWZh45VeWV4gTIdgw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":413425},"main":"dist/app.js","type":"module","types":"dist/app.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/app.d.ts","import":"./dist/app.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"f87da9168d647766372e25f98a6c1656bae3c5c9","scripts":{"dev":"tsx watch src/app.ts","lint":"eslint . --ext .ts","build":"tsc -p tsconfig.json","start":"node dist/app.js","format":"prettier --write .","prepare":"node scripts/prepare.mjs","lint:fix":"eslint . --ext .ts --fix","ai:review":"tsx src/cli.ts","typecheck":"tsc --noEmit","format:check":"prettier --check .","prepublishOnly":"npm run build"},"_npmUser":{"name":"eldenring","email":"601167822@qq.com"},"repository":{"url":"https://codeup.aliyun.com/6868ea39874c52f1221c4b89/PR_Agent.git","type":"git"},"_npmVersion":"10.4.0","description":"接入阿里云 Codeup 的 AI 代码审查机器人","directories":{},"_nodeVersion":"22.19.0","dependencies":{"zod":"^3.23.8","pino":"^9.5.0","axios":"^1.7.7","dotenv":"^16.6.1","express":"^4.21.1","pino-http":"^10.3.0","@cursor/sdk":"^1.0.19","@vscode/ripgrep":"^1.18.0","@connectrpc/connect-node":"^1.6.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","husky":"^9.1.6","eslint":"^8.57.1","prettier":"^3.3.3","typescript":"^5.6.3","@types/node":"^22.7.5","pino-pretty":"^11.3.0","@types/express":"^4.17.21","@commitlint/cli":"^19.5.0","eslint-config-prettier":"^9.1.0","@typescript-eslint/parser":"^8.8.1","@commitlint/config-conventional":"^19.5.0","@typescript-eslint/eslint-plugin":"^8.8.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-review_0.2.0_1782718214131_0.18258835833306986","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@eldenring/ai-review","version":"0.3.0","keywords":["codeup","ai","code-review","deepseek"],"license":"MIT","_id":"@eldenring/ai-review@0.3.0","maintainers":[{"name":"eldenring","email":"601167822@qq.com"}],"bin":{"ai-review":"bin/ai-review.js"},"dist":{"shasum":"cf84fc7823dcb929d509dfe3e0f7e00f4d7ed031","tarball":"https://registry.npmjs.org/@eldenring/ai-review/-/ai-review-0.3.0.tgz","fileCount":206,"integrity":"sha512-iqjRZV0kr3BryK+PoOYJoenple8s17l7if5zCqQ2QJKxkWdH4d3ryI8CM2qU18kCVngWOFPD0VCy+lJmwxDHkQ==","signatures":[{"sig":"MEQCIE9XisszFjimOVfYOfw7ilG887IPTe4bOiEmQDSF/3FJAiACPshRN/g+9UVCluMe1IVEgLfvCZESgS+iGWOX9EtKiQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":468072},"main":"dist/app.js","type":"module","types":"dist/app.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/app.d.ts","import":"./dist/app.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"229aea521b8dfed2d72e8a322983064c7483cf86","scripts":{"dev":"tsx watch src/app.ts","lint":"eslint . --ext .ts","build":"tsc -p tsconfig.json","start":"node dist/app.js","format":"prettier --write .","prepare":"node scripts/prepare.mjs","lint:fix":"eslint . --ext .ts --fix","ai:review":"tsx src/cli.ts","typecheck":"tsc --noEmit","format:check":"prettier --check .","prepublishOnly":"npm run build"},"_npmUser":{"name":"eldenring","email":"601167822@qq.com"},"repository":{"url":"https://codeup.aliyun.com/6868ea39874c52f1221c4b89/PR_Agent.git","type":"git"},"_npmVersion":"10.4.0","description":"接入阿里云 Codeup 的 AI 代码审查机器人","directories":{},"_nodeVersion":"22.19.0","dependencies":{"zod":"^3.23.8","pino":"^9.5.0","axios":"^1.7.7","dotenv":"^16.6.1","express":"^4.21.1","pino-http":"^10.3.0","@cursor/sdk":"^1.0.19","@vscode/ripgrep":"^1.18.0","@connectrpc/connect-node":"^1.6.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","husky":"^9.1.6","eslint":"^8.57.1","prettier":"^3.3.3","typescript":"^5.6.3","@types/node":"^22.7.5","pino-pretty":"^11.3.0","@types/express":"^4.17.21","@commitlint/cli":"^19.5.0","eslint-config-prettier":"^9.1.0","@typescript-eslint/parser":"^8.8.1","@commitlint/config-conventional":"^19.5.0","@typescript-eslint/eslint-plugin":"^8.8.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-review_0.3.0_1782909181800_0.97642819299508","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@eldenring/ai-review","version":"0.3.1","keywords":["codeup","ai","code-review","deepseek"],"license":"MIT","_id":"@eldenring/ai-review@0.3.1","maintainers":[{"name":"eldenring","email":"601167822@qq.com"}],"bin":{"ai-review":"bin/ai-review.js"},"dist":{"shasum":"475e69017b4114cadac0de3a589f2d1cb4345d7c","tarball":"https://registry.npmjs.org/@eldenring/ai-review/-/ai-review-0.3.1.tgz","fileCount":227,"integrity":"sha512-Uzn4tKcaMPdmuaziLKJfgJH/SkZAFhGz6xPHeeGvIiXBp/8C/FoqHQKM8DPQUyFdqYpZrWAM7QRHRGXzmEqAYQ==","signatures":[{"sig":"MEUCIB58ovPh/TouxR/TO8CiyluB32ZdV0pusLp4/gNJFLfPAiEA3ZdXWfiSAHEo6fH5lT6/fJzqCjVZXuWXJfkl/KZ1qGo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":529335},"main":"dist/app.js","type":"module","types":"dist/app.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/app.d.ts","import":"./dist/app.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"27da2ccb49977ffd1daeddd0710beadeba69348e","scripts":{"dev":"tsx watch src/app.ts","lint":"eslint . --ext .ts","test":"node --import tsx --test \"src/**/__tests__/*.test.ts\"","build":"tsc -p tsconfig.build.json","start":"node dist/app.js","format":"prettier --write .","prepare":"node scripts/prepare.mjs","lint:fix":"eslint . --ext .ts --fix","ai:review":"tsx src/cli.ts","typecheck":"tsc --noEmit","format:check":"prettier --check .","prepublishOnly":"npm run build"},"_npmUser":{"name":"eldenring","email":"601167822@qq.com"},"repository":{"url":"https://codeup.aliyun.com/6868ea39874c52f1221c4b89/PR_Agent.git","type":"git"},"_npmVersion":"10.4.0","description":"接入阿里云 Codeup 的 AI 代码审查机器人","directories":{},"_nodeVersion":"22.19.0","dependencies":{"zod":"^3.23.8","pino":"^9.5.0","axios":"^1.7.7","dotenv":"^16.6.1","express":"^4.21.1","pino-http":"^10.3.0","@cursor/sdk":"^1.0.19","@vscode/ripgrep":"^1.18.0","@connectrpc/connect-node":"^1.6.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","husky":"^9.1.6","eslint":"^8.57.1","prettier":"^3.3.3","typescript":"^5.6.3","@types/node":"^22.7.5","pino-pretty":"^11.3.0","@types/express":"^4.17.21","@commitlint/cli":"^19.5.0","eslint-config-prettier":"^9.1.0","@typescript-eslint/parser":"^8.8.1","@commitlint/config-conventional":"^19.5.0","@typescript-eslint/eslint-plugin":"^8.8.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-review_0.3.1_1783339371503_0.8599033901269568","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@eldenring/ai-review","version":"0.4.0","keywords":["codeup","ai","code-review","deepseek"],"license":"MIT","_id":"@eldenring/ai-review@0.4.0","maintainers":[{"name":"eldenring","email":"601167822@qq.com"}],"bin":{"ai-review":"bin/ai-review.js"},"dist":{"shasum":"0fbba5fcbcc199fca50a8775cb6163010c0e59ed","tarball":"https://registry.npmjs.org/@eldenring/ai-review/-/ai-review-0.4.0.tgz","fileCount":245,"integrity":"sha512-yKXbHuVL03ZX75jcaMz1F5tr7GwN519CayplOhS/13gJ1caOUvg0dYqr06JeIt2FcMF5//Oe0GP84OtL4r3k3w==","signatures":[{"sig":"MEQCIEt4LZmNOnT3JrhmlfB/yXnSsHxqrMSSFk4/vPQFeGjWAiAPKhxZS6QfAddFf2BsHp8U58oCAWvg8jvNf7lf8e+y9w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":602099},"main":"dist/app.js","type":"module","types":"dist/app.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/app.d.ts","import":"./dist/app.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"5c90bfe822b33eedfa0383eece64c7a6473a5ba4","scripts":{"dev":"tsx watch src/app.ts","lint":"eslint . --ext .ts","test":"node --import tsx --test \"src/**/__tests__/*.test.ts\"","build":"tsc -p tsconfig.build.json","start":"node dist/app.js","format":"prettier --write .","prepare":"node scripts/prepare.mjs","lint:fix":"eslint . --ext .ts --fix","ai:review":"tsx src/cli.ts","typecheck":"tsc --noEmit","format:check":"prettier --check .","prepublishOnly":"npm run build"},"_npmUser":{"name":"eldenring","email":"601167822@qq.com"},"repository":{"url":"https://codeup.aliyun.com/6868ea39874c52f1221c4b89/PR_Agent.git","type":"git"},"_npmVersion":"10.4.0","description":"接入阿里云 Codeup 的 AI 代码审查机器人","directories":{},"_nodeVersion":"22.19.0","dependencies":{"zod":"^3.23.8","pino":"^9.5.0","axios":"^1.7.7","dotenv":"^16.6.1","express":"^4.21.1","pino-http":"^10.3.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","husky":"^9.1.6","eslint":"^8.57.1","prettier":"^3.3.3","typescript":"^5.6.3","@types/node":"^22.7.5","pino-pretty":"^11.3.0","@types/express":"^4.17.21","@commitlint/cli":"^19.5.0","eslint-config-prettier":"^9.1.0","@typescript-eslint/parser":"^8.8.1","@commitlint/config-conventional":"^19.5.0","@typescript-eslint/eslint-plugin":"^8.8.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-review_0.4.0_1783563500151_0.28088660495571527","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@eldenring/ai-review","version":"0.4.1","keywords":["codeup","ai","code-review","deepseek"],"license":"MIT","_id":"@eldenring/ai-review@0.4.1","maintainers":[{"name":"eldenring","email":"601167822@qq.com"}],"bin":{"ai-review":"bin/ai-review.js"},"dist":{"shasum":"573be4305a6b3003695d50f41b349c046ba6f94f","tarball":"https://registry.npmjs.org/@eldenring/ai-review/-/ai-review-0.4.1.tgz","fileCount":245,"integrity":"sha512-/wuF135Yg7vJfQi9veXjF8bK2ZdGDuVrbT5vxyl0ETeaArQCIcYa+o2n44GJn1CA+wd/4uuctKN1mR8DIFdAdA==","signatures":[{"sig":"MEQCIEHZOAmnEqEyNrh5cop8CTilG4sG5es0ML6ZPnMAVOXDAiBRAV1OV6IsJjns2ob7H3EFucF4d8u9Z21aqLrlD6L9PQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":603523},"main":"dist/app.js","type":"module","types":"dist/app.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/app.d.ts","import":"./dist/app.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"37493009a840ff763799043f795d7b015f55c244","scripts":{"dev":"tsx watch src/app.ts","lint":"eslint . --ext .ts","test":"node --import tsx --test \"src/**/__tests__/*.test.ts\"","build":"tsc -p tsconfig.build.json","start":"node dist/app.js","format":"prettier --write .","prepare":"node scripts/prepare.mjs","lint:fix":"eslint . --ext .ts --fix","ai:review":"tsx src/cli.ts","typecheck":"tsc --noEmit","format:check":"prettier --check .","prepublishOnly":"npm run build"},"_npmUser":{"name":"eldenring","email":"601167822@qq.com"},"repository":{"url":"https://codeup.aliyun.com/6868ea39874c52f1221c4b89/PR_Agent.git","type":"git"},"_npmVersion":"10.4.0","description":"接入阿里云 Codeup 的 AI 代码审查机器人","directories":{},"_nodeVersion":"22.19.0","dependencies":{"zod":"^3.23.8","pino":"^9.5.0","axios":"^1.7.7","dotenv":"^16.6.1","express":"^4.21.1","pino-http":"^10.3.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","husky":"^9.1.6","eslint":"^8.57.1","prettier":"^3.3.3","typescript":"^5.6.3","@types/node":"^22.7.5","pino-pretty":"^11.3.0","@types/express":"^4.17.21","@commitlint/cli":"^19.5.0","eslint-config-prettier":"^9.1.0","@typescript-eslint/parser":"^8.8.1","@commitlint/config-conventional":"^19.5.0","@typescript-eslint/eslint-plugin":"^8.8.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-review_0.4.1_1783569741301_0.5004982220515961","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@eldenring/ai-review","version":"0.4.2","keywords":["codeup","ai","code-review","deepseek"],"license":"MIT","_id":"@eldenring/ai-review@0.4.2","maintainers":[{"name":"eldenring","email":"601167822@qq.com"}],"bin":{"ai-review":"bin/ai-review.js"},"dist":{"shasum":"2cfd3a07af288d33462105bffaff1a57e947cbcf","tarball":"https://registry.npmjs.org/@eldenring/ai-review/-/ai-review-0.4.2.tgz","fileCount":245,"integrity":"sha512-I/pWWYfTqfqnbqJ7TTVaPa3FYvJg3HE4t1VPOx0vCj8MyQauU6h3agzFMVPZWkSrCbImD60lD0pEB5xHUj3NSg==","signatures":[{"sig":"MEUCIGeQ5T7ZamUms2aL3+vJuVqYuPdpIrfYEj+iAs8CER7nAiEAtPjz2Tw4kUj2+Awm/mvkwb/0qMa4wewRXdRZt5KXS2E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":608634},"main":"dist/app.js","type":"module","types":"dist/app.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/app.d.ts","import":"./dist/app.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"48db853c1158f352f4e1a22ebd0df9742c180559","scripts":{"dev":"tsx watch src/app.ts","lint":"eslint . --ext .ts","test":"node --import tsx --test \"src/**/__tests__/*.test.ts\"","build":"tsc -p tsconfig.build.json","start":"node dist/app.js","format":"prettier --write .","prepare":"node scripts/prepare.mjs","lint:fix":"eslint . --ext .ts --fix","ai:review":"tsx src/cli.ts","typecheck":"tsc --noEmit","format:check":"prettier --check .","prepublishOnly":"npm run build"},"_npmUser":{"name":"eldenring","email":"601167822@qq.com"},"repository":{"url":"https://codeup.aliyun.com/6868ea39874c52f1221c4b89/PR_Agent.git","type":"git"},"_npmVersion":"10.4.0","description":"接入阿里云 Codeup 的 AI 代码审查机器人","directories":{},"_nodeVersion":"22.19.0","dependencies":{"zod":"^3.23.8","pino":"^9.5.0","axios":"^1.7.7","dotenv":"^16.6.1","express":"^4.21.1","pino-http":"^10.3.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","husky":"^9.1.6","eslint":"^8.57.1","prettier":"^3.3.3","typescript":"^5.6.3","@types/node":"^22.7.5","pino-pretty":"^11.3.0","@types/express":"^4.17.21","@commitlint/cli":"^19.5.0","eslint-config-prettier":"^9.1.0","@typescript-eslint/parser":"^8.8.1","@commitlint/config-conventional":"^19.5.0","@typescript-eslint/eslint-plugin":"^8.8.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-review_0.4.2_1783581596982_0.39130244384597623","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"@eldenring/ai-review","version":"0.4.3","keywords":["codeup","ai","code-review","deepseek"],"license":"MIT","_id":"@eldenring/ai-review@0.4.3","maintainers":[{"name":"eldenring","email":"601167822@qq.com"}],"bin":{"ai-review":"bin/ai-review.js"},"dist":{"shasum":"eaf01b6b1b3c6db2d7bdc3acbe89183994688fe5","tarball":"https://registry.npmjs.org/@eldenring/ai-review/-/ai-review-0.4.3.tgz","fileCount":245,"integrity":"sha512-U9QTQLojOn6qo/zy1edGRS0uSLqwkJRpwQFszfQCRA6vyZ8ukU2ufaajrIRWTeUfnmWZ03kGvhMUWgHlcMXVEg==","signatures":[{"sig":"MEQCIColLHjRQH/oJdvpoJaBT+tLr7wuoBvoiaELdMWo7s7OAiBP+To7HynOv+SEI/8QmQg0I6kATAavUBqYdP20k9u5sg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":611125},"main":"dist/app.js","type":"module","types":"dist/app.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/app.d.ts","import":"./dist/app.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"588a6b7f43e929c6654473e0046207709710ebe5","scripts":{"dev":"tsx watch src/app.ts","lint":"eslint . --ext .ts","test":"node --import tsx --test \"src/**/__tests__/*.test.ts\"","build":"tsc -p tsconfig.build.json","start":"node dist/app.js","format":"prettier --write .","prepare":"node scripts/prepare.mjs","lint:fix":"eslint . --ext .ts --fix","ai:review":"tsx src/cli.ts","typecheck":"tsc --noEmit","format:check":"prettier --check .","prepublishOnly":"npm run build"},"_npmUser":{"name":"eldenring","email":"601167822@qq.com"},"repository":{"url":"https://codeup.aliyun.com/6868ea39874c52f1221c4b89/PR_Agent.git","type":"git"},"_npmVersion":"10.4.0","description":"接入阿里云 Codeup 的 AI 代码审查机器人","directories":{},"_nodeVersion":"22.19.0","dependencies":{"zod":"^3.23.8","pino":"^9.5.0","axios":"^1.7.7","dotenv":"^16.6.1","express":"^4.21.1","pino-http":"^10.3.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","husky":"^9.1.6","eslint":"^8.57.1","prettier":"^3.3.3","typescript":"^5.6.3","@types/node":"^22.7.5","pino-pretty":"^11.3.0","@types/express":"^4.17.21","@commitlint/cli":"^19.5.0","eslint-config-prettier":"^9.1.0","@typescript-eslint/parser":"^8.8.1","@commitlint/config-conventional":"^19.5.0","@typescript-eslint/eslint-plugin":"^8.8.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-review_0.4.3_1783584541013_0.24519531810038342","host":"s3://npm-registry-packages-npm-production"}},"0.4.5":{"name":"@eldenring/ai-review","version":"0.4.5","keywords":["codeup","ai","code-review","deepseek"],"license":"MIT","_id":"@eldenring/ai-review@0.4.5","maintainers":[{"name":"eldenring","email":"601167822@qq.com"}],"bin":{"ai-review":"bin/ai-review.js"},"dist":{"shasum":"5c5653ae8aeb368b3d7bc6b26cb89826ad8ae9bc","tarball":"https://registry.npmjs.org/@eldenring/ai-review/-/ai-review-0.4.5.tgz","fileCount":245,"integrity":"sha512-sGr2shd/+KKQBao/DsJQWAq4GxvSJeyzT9aZo3sQDIUCRr3EWeZcEskxmBECfxhKFVB2Ia7RY8ANpTyuMoQFxQ==","signatures":[{"sig":"MEYCIQCDNqQ/PsfFuhyDKXQfMzv33C1iz985S2rYBt+A7VbFJgIhAMQJK+QgJtxva4UQHgaZPQMSN6FfZHCy5dD3L6YNQ7cd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":611125},"main":"dist/app.js","type":"module","types":"dist/app.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/app.d.ts","import":"./dist/app.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"39b4b6a703ff79d659f5a31f635bc090376d7216","scripts":{"dev":"tsx watch src/app.ts","lint":"eslint . --ext .ts","test":"node --import tsx --test \"src/**/__tests__/*.test.ts\"","build":"tsc -p tsconfig.build.json","start":"node dist/app.js","format":"prettier --write .","prepare":"node scripts/prepare.mjs","lint:fix":"eslint . --ext .ts --fix","ai:review":"tsx src/cli.ts","typecheck":"tsc --noEmit","format:check":"prettier --check .","prepublishOnly":"npm run build"},"_npmUser":{"name":"eldenring","email":"601167822@qq.com"},"repository":{"url":"https://codeup.aliyun.com/6868ea39874c52f1221c4b89/PR_Agent.git","type":"git"},"_npmVersion":"10.4.0","description":"接入阿里云 Codeup 的 AI 代码审查机器人","directories":{},"_nodeVersion":"22.19.0","dependencies":{"zod":"^3.23.8","pino":"^9.5.0","axios":"^1.7.7","dotenv":"^16.6.1","express":"^4.21.1","pino-http":"^10.3.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","husky":"^9.1.6","eslint":"^8.57.1","prettier":"^3.3.3","typescript":"^5.6.3","@types/node":"^22.7.5","pino-pretty":"^11.3.0","@types/express":"^4.17.21","@commitlint/cli":"^19.5.0","eslint-config-prettier":"^9.1.0","@typescript-eslint/parser":"^8.8.1","@commitlint/config-conventional":"^19.5.0","@typescript-eslint/eslint-plugin":"^8.8.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-review_0.4.5_1783652147079_0.5827233833825893","host":"s3://npm-registry-packages-npm-production"}},"0.4.6":{"name":"@eldenring/ai-review","version":"0.4.6","keywords":["codeup","ai","code-review","deepseek"],"license":"MIT","_id":"@eldenring/ai-review@0.4.6","maintainers":[{"name":"eldenring","email":"601167822@qq.com"}],"bin":{"ai-review":"bin/ai-review.js"},"dist":{"shasum":"88e9039633838200ccc8352463cc59c1c2e32c89","tarball":"https://registry.npmjs.org/@eldenring/ai-review/-/ai-review-0.4.6.tgz","fileCount":248,"integrity":"sha512-Gkf7Pos21LEHbk4m+DWZnrP+oc8kDOnrl7sL6CPSGk2Do9ofHtffH1TAHKDThjqK2y4KBULZvAzwXQgeejze1A==","signatures":[{"sig":"MEQCIHiUxI99F/4Cpvjz3hvWtGg5ipGsk9wjvjNpAEIzT+vRAiBCL0QvFH5AdtsftsxGWYP9bjx+cJmmKW30uY1e1/Nbnw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":613771},"main":"dist/app.js","type":"module","types":"dist/app.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/app.d.ts","import":"./dist/app.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"32d4405734e61d5c322e76a6d1e1b30a6ebda9b6","scripts":{"dev":"tsx watch src/app.ts","lint":"eslint . --ext .ts","test":"node --import tsx --test \"src/**/__tests__/*.test.ts\"","build":"tsc -p tsconfig.build.json","start":"node dist/app.js","format":"prettier --write .","prepare":"node scripts/prepare.mjs","lint:fix":"eslint . --ext .ts --fix","ai:review":"tsx src/cli.ts","typecheck":"tsc --noEmit","format:check":"prettier --check .","prepublishOnly":"npm run build"},"_npmUser":{"name":"eldenring","email":"601167822@qq.com"},"repository":{"url":"https://codeup.aliyun.com/6868ea39874c52f1221c4b89/PR_Agent.git","type":"git"},"_npmVersion":"10.4.0","description":"接入阿里云 Codeup 的 AI 代码审查机器人","directories":{},"_nodeVersion":"22.19.0","dependencies":{"zod":"^3.23.8","pino":"^9.5.0","axios":"^1.7.7","dotenv":"^16.6.1","express":"^4.21.1","pino-http":"^10.3.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","husky":"^9.1.6","eslint":"^8.57.1","prettier":"^3.3.3","typescript":"^5.6.3","@types/node":"^22.7.5","pino-pretty":"^11.3.0","@types/express":"^4.17.21","@commitlint/cli":"^19.5.0","eslint-config-prettier":"^9.1.0","@typescript-eslint/parser":"^8.8.1","@commitlint/config-conventional":"^19.5.0","@typescript-eslint/eslint-plugin":"^8.8.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-review_0.4.6_1783654245550_0.21658743651566237","host":"s3://npm-registry-packages-npm-production"}},"0.4.7":{"name":"@eldenring/ai-review","version":"0.4.7","keywords":["codeup","ai","code-review","deepseek"],"license":"MIT","_id":"@eldenring/ai-review@0.4.7","maintainers":[{"name":"eldenring","email":"601167822@qq.com"}],"bin":{"ai-review":"bin/ai-review.js"},"dist":{"shasum":"c4c2aec310b9f51d594dc5df97f89bb86cb53aaf","tarball":"https://registry.npmjs.org/@eldenring/ai-review/-/ai-review-0.4.7.tgz","fileCount":251,"integrity":"sha512-h0AbbZmRv83byZgan3qzQY3U0+sBpawhpFJYDg18iPhopR94uty2SSf78/lzpVApRo/6CeKF98etR7zC4FrKGw==","signatures":[{"sig":"MEQCIBhss9rFcMtz8wU0lIFW3Upn9zR0MxsUP0elh9CuRhRYAiBqqx16ZfH9cPL2sUnbn/A7YCqA4zCQVPklvgPQTL2MeA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":617962},"main":"dist/app.js","type":"module","types":"dist/app.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/app.d.ts","import":"./dist/app.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"4b1ae910d4685826e0c2e972f5e26c1d0e037041","scripts":{"dev":"tsx watch src/app.ts","lint":"eslint . --ext .ts","test":"node --import tsx --test \"src/**/__tests__/*.test.ts\"","build":"tsc -p tsconfig.build.json","start":"node dist/app.js","format":"prettier --write .","prepare":"node scripts/prepare.mjs","lint:fix":"eslint . --ext .ts --fix","ai:review":"tsx src/cli.ts","typecheck":"tsc --noEmit","format:check":"prettier --check .","prepublishOnly":"npm run build"},"_npmUser":{"name":"eldenring","email":"601167822@qq.com"},"repository":{"url":"https://codeup.aliyun.com/6868ea39874c52f1221c4b89/PR_Agent.git","type":"git"},"_npmVersion":"10.4.0","description":"接入阿里云 Codeup 的 AI 代码审查机器人","directories":{},"_nodeVersion":"22.19.0","dependencies":{"zod":"^3.23.8","pino":"^9.5.0","axios":"^1.7.7","dotenv":"^16.6.1","express":"^4.21.1","pino-http":"^10.3.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","husky":"^9.1.6","eslint":"^8.57.1","prettier":"^3.3.3","typescript":"^5.6.3","@types/node":"^22.7.5","pino-pretty":"^11.3.0","@types/express":"^4.17.21","@commitlint/cli":"^19.5.0","eslint-config-prettier":"^9.1.0","@typescript-eslint/parser":"^8.8.1","@commitlint/config-conventional":"^19.5.0","@typescript-eslint/eslint-plugin":"^8.8.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-review_0.4.7_1783655430476_0.7169398510942189","host":"s3://npm-registry-packages-npm-production"}},"0.4.8":{"name":"@eldenring/ai-review","version":"0.4.8","keywords":["codeup","ai","code-review","deepseek"],"license":"MIT","_id":"@eldenring/ai-review@0.4.8","maintainers":[{"name":"eldenring","email":"601167822@qq.com"}],"bin":{"ai-review":"bin/ai-review.js"},"dist":{"shasum":"6b7c296d207ac2bbb8577b521707f6b776a25f4b","tarball":"https://registry.npmjs.org/@eldenring/ai-review/-/ai-review-0.4.8.tgz","fileCount":278,"integrity":"sha512-aVPGjzts4OJ3xrLCax4gTRmtQHV9+tfMpTIRebFD9/ykcQVSkdkg0CIqDimdlmzj2JgMS3A24eNPthTJW1ApgQ==","signatures":[{"sig":"MEUCIA4dQGqI9GvEc4gX399gomHytJns8QSEr0bDEu9x9AlxAiEAq9bRcCd2lR6cG61LCoD7eN/2TBBimP5kOiC0qwIgePw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":683587},"main":"dist/app.js","type":"module","types":"dist/app.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/app.d.ts","import":"./dist/app.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"97f16662255ca15dcbba15cbc2312e769a79f614","scripts":{"dev":"tsx watch src/app.ts","lint":"eslint . --ext .ts","test":"node --import tsx --test \"src/**/__tests__/*.test.ts\"","build":"tsc -p tsconfig.build.json","start":"node dist/app.js","format":"prettier --write .","prepare":"node scripts/prepare.mjs","regress":"tsx src/regression/run-all.ts","lint:fix":"eslint . --ext .ts --fix","ai:review":"tsx src/cli.ts","typecheck":"tsc --noEmit","format:check":"prettier --check .","prepublishOnly":"npm run build"},"_npmUser":{"name":"eldenring","email":"601167822@qq.com"},"repository":{"url":"https://codeup.aliyun.com/6868ea39874c52f1221c4b89/PR_Agent.git","type":"git"},"_npmVersion":"10.4.0","description":"接入阿里云 Codeup 的 AI 代码审查机器人","directories":{},"_nodeVersion":"22.19.0","dependencies":{"zod":"^3.23.8","pino":"^9.5.0","axios":"^1.7.7","dotenv":"^16.6.1","express":"^4.21.1","pino-http":"^10.3.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","husky":"^9.1.6","eslint":"^8.57.1","prettier":"^3.3.3","typescript":"^5.6.3","@types/node":"^22.7.5","pino-pretty":"^11.3.0","@types/express":"^4.17.21","@commitlint/cli":"^19.5.0","eslint-config-prettier":"^9.1.0","@typescript-eslint/parser":"^8.8.1","@commitlint/config-conventional":"^19.5.0","@typescript-eslint/eslint-plugin":"^8.8.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-review_0.4.8_1784101661640_0.47575187758730486","host":"s3://npm-registry-packages-npm-production"}},"0.4.9":{"name":"@eldenring/ai-review","version":"0.4.9","keywords":["codeup","ai","code-review","cursor","deepseek"],"license":"MIT","_id":"@eldenring/ai-review@0.4.9","maintainers":[{"name":"eldenring","email":"601167822@qq.com"}],"bin":{"ai-review":"bin/ai-review.js"},"dist":{"shasum":"b45dbe490bf925b85d1021288b37c4203d70c61f","tarball":"https://registry.npmjs.org/@eldenring/ai-review/-/ai-review-0.4.9.tgz","fileCount":284,"integrity":"sha512-8Cps/+zf6DZL8RYAplLyH/CuvhO6m3J1yvy1omBdVf8Kf/cBenWLziPcEUKx+zLjAF5yoIH48Cc72d8ORvzv1w==","signatures":[{"sig":"MEUCIQChQyKEYTcj3aBTjB+MHHxrMi9rRxIRkgxkJd2u4+zfFAIgY9PZJpA71gnM75WqjjbY1quE5nTZviwWbu36tekV4AU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":704186},"main":"dist/app.js","type":"module","types":"dist/app.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/app.d.ts","import":"./dist/app.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"ee424a48df08cd1b9abeaa6df9ac1666eacce732","scripts":{"dev":"tsx watch src/app.ts","lint":"eslint . --ext .ts","test":"node --import tsx --test \"src/**/__tests__/*.test.ts\"","build":"tsc -p tsconfig.build.json","start":"node dist/app.js","format":"prettier --write .","prepare":"node scripts/prepare.mjs","regress":"tsx src/regression/run-all.ts","lint:fix":"eslint . --ext .ts --fix","ai:review":"tsx src/cli.ts","typecheck":"tsc --noEmit","format:check":"prettier --check .","prepublishOnly":"npm run build"},"_npmUser":{"name":"eldenring","email":"601167822@qq.com"},"repository":{"url":"https://codeup.aliyun.com/6868ea39874c52f1221c4b89/PR_Agent.git","type":"git"},"_npmVersion":"10.4.0","description":"接入阿里云 Codeup 的 AI 代码审查机器人","directories":{},"_nodeVersion":"22.19.0","dependencies":{"zod":"^3.23.8","pino":"^9.5.0","axios":"^1.7.7","dotenv":"^16.6.1","express":"^4.21.1","pino-http":"^10.3.0","@cursor/sdk":"^1.0.23"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","husky":"^9.1.6","eslint":"^8.57.1","prettier":"^3.3.3","typescript":"^5.6.3","@types/node":"^22.7.5","pino-pretty":"^11.3.0","@types/express":"^4.17.21","@commitlint/cli":"^19.5.0","eslint-config-prettier":"^9.1.0","@typescript-eslint/parser":"^8.8.1","@commitlint/config-conventional":"^19.5.0","@typescript-eslint/eslint-plugin":"^8.8.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-review_0.4.9_1784280428633_0.9982920887876767","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@eldenring/ai-review","version":"0.5.0","keywords":["codeup","ai","code-review","cursor","deepseek"],"license":"MIT","_id":"@eldenring/ai-review@0.5.0","maintainers":[{"name":"eldenring","email":"601167822@qq.com"}],"bin":{"ai-review":"bin/ai-review.js"},"dist":{"shasum":"e2eda6f61e42e4208ae96713fb2a8e731dff87a0","tarball":"https://registry.npmjs.org/@eldenring/ai-review/-/ai-review-0.5.0.tgz","fileCount":293,"integrity":"sha512-xzf+jtNHPjaMVneccvTQyryYkuuUwCc5LrG2THPOrTrlDLBKYwh+Wh9Bu6q4t5iDmN+3lO/kaxh4LfCgZe6oMQ==","signatures":[{"sig":"MEQCIAop+ZQLOkQ0NexrTe9rgepaaODByuIU/QiIzH6eYp+OAiAArBdztIC2ZfmVFXCv87/KcoSRO244yRQc5+yhijHQpA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":752651},"main":"dist/app.js","type":"module","types":"dist/app.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/app.d.ts","import":"./dist/app.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"871a99cfb2ce81cf7c5c0740e9643892a82c5357","scripts":{"dev":"tsx watch src/app.ts","lint":"eslint . --ext .ts","test":"node --import tsx --test \"src/**/__tests__/*.test.ts\"","build":"tsc -p tsconfig.build.json","start":"node dist/app.js","format":"prettier --write .","prepare":"node scripts/prepare.mjs","regress":"tsx src/regression/run-all.ts","lint:fix":"eslint . --ext .ts --fix","ai:review":"tsx src/cli.ts","typecheck":"tsc --noEmit","format:check":"prettier --check .","prepublishOnly":"npm run build"},"_npmUser":{"name":"eldenring","email":"601167822@qq.com"},"repository":{"url":"https://codeup.aliyun.com/6868ea39874c52f1221c4b89/PR_Agent.git","type":"git"},"_npmVersion":"10.4.0","description":"接入阿里云 Codeup 的 AI 代码审查机器人","directories":{},"_nodeVersion":"22.19.0","dependencies":{"zod":"^3.23.8","pino":"^9.5.0","axios":"^1.7.7","dotenv":"^16.6.1","express":"^4.21.1","pino-http":"^10.3.0","@cursor/sdk":"^1.0.23"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","husky":"^9.1.6","eslint":"^8.57.1","prettier":"^3.3.3","typescript":"^5.6.3","@types/node":"^22.7.5","pino-pretty":"^11.3.0","@types/express":"^4.17.21","@commitlint/cli":"^19.5.0","eslint-config-prettier":"^9.1.0","@typescript-eslint/parser":"^8.8.1","@commitlint/config-conventional":"^19.5.0","@typescript-eslint/eslint-plugin":"^8.8.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-review_0.5.0_1784861462935_0.5003617233332378","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@eldenring/ai-review","version":"0.6.0","keywords":["codeup","ai","code-review","cursor","deepseek"],"license":"MIT","_id":"@eldenring/ai-review@0.6.0","maintainers":[{"name":"eldenring","email":"601167822@qq.com"}],"bin":{"ai-review":"bin/ai-review.js"},"dist":{"shasum":"5ad6008d36559a23d14e5738d1e31fd13feb3fec","tarball":"https://registry.npmjs.org/@eldenring/ai-review/-/ai-review-0.6.0.tgz","fileCount":299,"integrity":"sha512-xDfhg4vErfl7MzwW3IXntu8tcWVkEIEyldrUGseOG1/TSvyEyhS4mNGpJHyO/iZXEFE10mwa/UPNKW74yEBPcQ==","signatures":[{"sig":"MEUCIAER60Wq36oMB0Mu32IGUaeWS0FKd61EvDBi0UdJSbXdAiEA+ntTMCe6Lz0ITYRPPNQ3mup0Vz2ro79f6wmIHE1QyLk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":774681},"main":"dist/app.js","type":"module","types":"dist/app.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/app.d.ts","import":"./dist/app.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"937c78528b8aec22eb5d2e0bed17f2c8e84a3afc","scripts":{"dev":"tsx watch src/app.ts","lint":"eslint . --ext .ts","test":"node --import tsx --test \"src/**/__tests__/*.test.ts\"","build":"tsc -p tsconfig.build.json","start":"node dist/app.js","format":"prettier --write .","prepare":"node scripts/prepare.mjs","regress":"tsx src/regression/run-all.ts","lint:fix":"eslint . --ext .ts --fix","ai:review":"tsx src/cli.ts","typecheck":"tsc --noEmit","format:check":"prettier --check .","prepublishOnly":"npm run build"},"_npmUser":{"name":"eldenring","email":"601167822@qq.com"},"repository":{"url":"https://codeup.aliyun.com/6868ea39874c52f1221c4b89/PR_Agent.git","type":"git"},"_npmVersion":"10.4.0","description":"接入阿里云 Codeup 的 AI 代码审查机器人","directories":{},"_nodeVersion":"22.19.0","dependencies":{"zod":"^3.23.8","pino":"^9.5.0","axios":"^1.7.7","dotenv":"^16.6.1","express":"^4.21.1","pino-http":"^10.3.0","@cursor/sdk":"^1.0.23"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","husky":"^9.1.6","eslint":"^8.57.1","prettier":"^3.3.3","typescript":"^5.6.3","@types/node":"^22.7.5","pino-pretty":"^11.3.0","@types/express":"^4.17.21","@commitlint/cli":"^19.5.0","eslint-config-prettier":"^9.1.0","@typescript-eslint/parser":"^8.8.1","@commitlint/config-conventional":"^19.5.0","@typescript-eslint/eslint-plugin":"^8.8.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-review_0.6.0_1784886438850_0.2968835315152687","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@eldenring/ai-review","version":"0.6.1","keywords":["codeup","ai","code-review","cursor","deepseek"],"license":"MIT","_id":"@eldenring/ai-review@0.6.1","maintainers":[{"name":"eldenring","email":"601167822@qq.com"}],"bin":{"ai-review":"bin/ai-review.js"},"dist":{"shasum":"22f839ff2379d1f9240e05005e599b77237dd4ef","tarball":"https://registry.npmjs.org/@eldenring/ai-review/-/ai-review-0.6.1.tgz","fileCount":299,"integrity":"sha512-KgcjKOOf+qfNAAjE08PiKfAoAo1aBrJEJz/pt29I8qbg0sUS5RMjMW7jmMz08lzTwjf5ijBsjGJVYRkhmhwReA==","signatures":[{"sig":"MEQCIC9ZiYrQkcpQzcfr9Slj3nzlZT4dwA0wI952IOdqzMDDAiAu+IDR1t278puAcXZUKP/UZUd+45k9UAYSt3wFtezYhA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":774681},"main":"dist/app.js","type":"module","types":"dist/app.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/app.d.ts","import":"./dist/app.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"88d339b7e7a58a6e5209275ebe0ee55fafc53eb6","scripts":{"dev":"tsx watch src/app.ts","lint":"eslint . --ext .ts","test":"node --import tsx --test \"src/**/__tests__/*.test.ts\"","build":"tsc -p tsconfig.build.json","start":"node dist/app.js","format":"prettier --write .","prepare":"node scripts/prepare.mjs","regress":"tsx src/regression/run-all.ts","lint:fix":"eslint . --ext .ts --fix","ai:review":"tsx src/cli.ts","typecheck":"tsc --noEmit","format:check":"prettier --check .","prepublishOnly":"npm run build"},"_npmUser":{"name":"eldenring","email":"601167822@qq.com"},"repository":{"url":"https://codeup.aliyun.com/6868ea39874c52f1221c4b89/PR_Agent.git","type":"git"},"_npmVersion":"10.4.0","description":"接入阿里云 Codeup 的 AI 代码审查机器人","directories":{},"_nodeVersion":"22.19.0","dependencies":{"zod":"^3.23.8","pino":"^9.5.0","axios":"^1.7.7","dotenv":"^16.6.1","express":"^4.21.1","pino-http":"^10.3.0","@cursor/sdk":"^1.0.23"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","husky":"^9.1.6","eslint":"^8.57.1","prettier":"^3.3.3","typescript":"^5.6.3","@types/node":"^22.7.5","pino-pretty":"^11.3.0","@types/express":"^4.17.21","@commitlint/cli":"^19.5.0","eslint-config-prettier":"^9.1.0","@typescript-eslint/parser":"^8.8.1","@commitlint/config-conventional":"^19.5.0","@typescript-eslint/eslint-plugin":"^8.8.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-review_0.6.1_1784886805310_0.3340468874293421","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"@eldenring/ai-review","version":"0.6.2","keywords":["codeup","ai","code-review","cursor","deepseek"],"license":"MIT","_id":"@eldenring/ai-review@0.6.2","maintainers":[{"name":"eldenring","email":"601167822@qq.com"}],"bin":{"ai-review":"bin/ai-review.js"},"dist":{"shasum":"d5686063b9017a7d8c3e1b4bdb87fc5f033ba37c","tarball":"https://registry.npmjs.org/@eldenring/ai-review/-/ai-review-0.6.2.tgz","fileCount":395,"integrity":"sha512-9S+3P8hnsjPzuM5AWQaZTxgq/jecWvV/IB5x91yATPIkisDdyzQ16nhP/6jaQgqafu+magmyPhWvAk4/jB/70A==","signatures":[{"sig":"MEUCIEf2l59pfDCYC8RsvZJR3UmvLn8HzVJCTpXbWq7NuLadAiEAuXHfLw6Tpu8+qgAaIi4pl3wnb9sLRhXMlMWYzp+oLss=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1550086},"main":"dist/app.js","type":"module","types":"dist/app.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/app.d.ts","import":"./dist/app.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"5252edb36c2dfbc1e3f9466ef5bc4e066e21e1c5","scripts":{"dev":"tsx watch src/app.ts","lint":"eslint . --ext .ts","test":"node --import tsx --test \"src/**/__tests__/*.test.ts\"","build":"tsc -p tsconfig.build.json","start":"node dist/app.js","format":"prettier --write .","prepare":"node scripts/prepare.mjs","regress":"tsx src/regression/run-all.ts","lint:fix":"eslint . --ext .ts --fix","ai:review":"tsx src/cli.ts","typecheck":"tsc --noEmit","format:check":"prettier --check .","impact:stats":"tsx src/regression/impact-stats.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"eldenring","email":"601167822@qq.com"},"repository":{"url":"https://codeup.aliyun.com/6868ea39874c52f1221c4b89/PR_Agent.git","type":"git"},"_npmVersion":"10.4.0","description":"接入阿里云 Codeup 的 AI 代码审查机器人","directories":{},"_nodeVersion":"22.19.0","dependencies":{"zod":"^3.23.8","pino":"^9.5.0","axios":"^1.7.7","dotenv":"^16.6.1","express":"^4.21.1","pino-http":"^10.3.0","@cursor/sdk":"^1.0.23"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","husky":"^9.1.6","eslint":"^8.57.1","prettier":"^3.3.3","typescript":"^5.6.3","@types/node":"^22.7.5","pino-pretty":"^11.3.0","@types/express":"^4.17.21","@commitlint/cli":"^19.5.0","eslint-config-prettier":"^9.1.0","@typescript-eslint/parser":"^8.8.1","@commitlint/config-conventional":"^19.5.0","@typescript-eslint/eslint-plugin":"^8.8.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-review_0.6.2_1786071914533_0.5485652887161172","host":"s3://npm-registry-packages-npm-production"}},"0.6.3":{"name":"@eldenring/ai-review","version":"0.6.3","keywords":["codeup","ai","code-review","cursor","deepseek"],"license":"MIT","_id":"@eldenring/ai-review@0.6.3","maintainers":[{"name":"eldenring","email":"601167822@qq.com"}],"bin":{"ai-review":"bin/ai-review.js"},"dist":{"shasum":"3e745d37e10e3519b09daf8a8eb21270c4c36aaa","tarball":"https://registry.npmjs.org/@eldenring/ai-review/-/ai-review-0.6.3.tgz","fileCount":395,"integrity":"sha512-VC+ZOSUeMGDCZ3C6R+rwzQHKWpd14I7/QGIDP/5T1iAgZEZ186lG/8OzfxWaV4Da1wcDmzVXpJwzlzRgfaSdkA==","signatures":[{"sig":"MEQCICsBKrDGF/S7nOa9VJQiPq14hCeUt0LfvCL20Q6oxULeAiA9wWoItNcxSSfCrTWcJHRc4x+2axZo8dHLLFKuEeKqHA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1551793},"main":"dist/app.js","type":"module","types":"dist/app.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/app.d.ts","import":"./dist/app.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"5252edb36c2dfbc1e3f9466ef5bc4e066e21e1c5","scripts":{"dev":"tsx watch src/app.ts","lint":"eslint . --ext .ts","test":"node --import tsx --test \"src/**/__tests__/*.test.ts\"","build":"tsc -p tsconfig.build.json","start":"node dist/app.js","format":"prettier --write .","prepare":"node scripts/prepare.mjs","regress":"tsx src/regression/run-all.ts","lint:fix":"eslint . --ext .ts --fix","ai:review":"tsx src/cli.ts","typecheck":"tsc --noEmit","format:check":"prettier --check .","impact:stats":"tsx src/regression/impact-stats.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"eldenring","email":"601167822@qq.com"},"repository":{"url":"https://codeup.aliyun.com/6868ea39874c52f1221c4b89/PR_Agent.git","type":"git"},"_npmVersion":"10.4.0","description":"接入阿里云 Codeup 的 AI 代码审查机器人","directories":{},"_nodeVersion":"22.19.0","dependencies":{"zod":"^3.23.8","pino":"^9.5.0","axios":"^1.7.7","dotenv":"^16.6.1","express":"^4.21.1","pino-http":"^10.3.0","@cursor/sdk":"^1.0.23"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","husky":"^9.1.6","eslint":"^8.57.1","prettier":"^3.3.3","typescript":"^5.6.3","@types/node":"^22.7.5","pino-pretty":"^11.3.0","@types/express":"^4.17.21","@commitlint/cli":"^19.5.0","eslint-config-prettier":"^9.1.0","@typescript-eslint/parser":"^8.8.1","@commitlint/config-conventional":"^19.5.0","@typescript-eslint/eslint-plugin":"^8.8.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-review_0.6.3_1786074952460_0.48834673759354064","host":"s3://npm-registry-packages-npm-production"}},"0.6.4":{"name":"@eldenring/ai-review","version":"0.6.4","keywords":["codeup","ai","code-review","cursor","deepseek"],"license":"MIT","_id":"@eldenring/ai-review@0.6.4","maintainers":[{"name":"eldenring","email":"601167822@qq.com"}],"bin":{"ai-review":"bin/ai-review.js"},"dist":{"shasum":"10335e964136c33118d86fa7926d7545c91204f6","tarball":"https://registry.npmjs.org/@eldenring/ai-review/-/ai-review-0.6.4.tgz","fileCount":401,"integrity":"sha512-W6n9+O2QR/PSFc+uc6aOpd7giKJ2lqsqIzSAiyLThjk/KymkwN+zR2Tjjm77SPKWpIPx5ug4FiVXR7JojmzbjA==","signatures":[{"sig":"MEQCIFily1/cXJEwGPWi7+8KTUWL92CiegzN/7GKN7QfL5jwAiAxcE92W0tItrVLDdx+Vq1+1dRreEVG2OyvWUuXG4L9fQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1576285},"main":"dist/app.js","type":"module","types":"dist/app.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/app.d.ts","import":"./dist/app.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"5252edb36c2dfbc1e3f9466ef5bc4e066e21e1c5","scripts":{"dev":"tsx watch src/app.ts","lint":"eslint . --ext .ts","test":"node --import tsx --test \"src/**/__tests__/*.test.ts\"","build":"tsc -p tsconfig.build.json","start":"node dist/app.js","format":"prettier --write .","prepare":"node scripts/prepare.mjs","regress":"tsx src/regression/run-all.ts","lint:fix":"eslint . --ext .ts --fix","ai:review":"tsx src/cli.ts","typecheck":"tsc --noEmit","format:check":"prettier --check .","impact:stats":"tsx src/regression/impact-stats.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"eldenring","email":"601167822@qq.com"},"repository":{"url":"https://codeup.aliyun.com/6868ea39874c52f1221c4b89/PR_Agent.git","type":"git"},"_npmVersion":"10.4.0","description":"接入阿里云 Codeup 的 AI 代码审查机器人","directories":{},"_nodeVersion":"22.19.0","dependencies":{"zod":"^3.23.8","pino":"^9.5.0","axios":"^1.7.7","dotenv":"^16.6.1","express":"^4.21.1","pino-http":"^10.3.0","@cursor/sdk":"^1.0.23"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","husky":"^9.1.6","eslint":"^8.57.1","prettier":"^3.3.3","typescript":"^5.6.3","@types/node":"^22.7.5","pino-pretty":"^11.3.0","@types/express":"^4.17.21","@commitlint/cli":"^19.5.0","eslint-config-prettier":"^9.1.0","@typescript-eslint/parser":"^8.8.1","@commitlint/config-conventional":"^19.5.0","@typescript-eslint/eslint-plugin":"^8.8.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-review_0.6.4_1786085342546_0.22636094224682357","host":"s3://npm-registry-packages-npm-production"}},"0.6.5":{"name":"@eldenring/ai-review","version":"0.6.5","keywords":["codeup","ai","code-review","cursor","deepseek"],"license":"MIT","_id":"@eldenring/ai-review@0.6.5","maintainers":[{"name":"eldenring","email":"601167822@qq.com"}],"bin":{"ai-review":"bin/ai-review.js"},"dist":{"shasum":"7fdf6bd235a6e208d6f7aec9328da42f8e109df9","tarball":"https://registry.npmjs.org/@eldenring/ai-review/-/ai-review-0.6.5.tgz","fileCount":401,"integrity":"sha512-Fd7Lo8Omx883kS/xswRytEAhW3axeqwIwyqVAABALPoDi4zxY7u3Rg8mE1DGMHsePI5+uKrTqn6yPHJKG8YF4A==","signatures":[{"sig":"MEQCICa+yGVaDk5p55wpnxnNcyhFsfyMopnlakpG8ERCwepDAiBpeYKO4x2A+geuLKFyXoCdUkHCrAnqa3CNXZCwgaeyDQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1588918},"main":"dist/app.js","type":"module","types":"dist/app.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/app.d.ts","import":"./dist/app.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"5252edb36c2dfbc1e3f9466ef5bc4e066e21e1c5","scripts":{"dev":"tsx watch src/app.ts","lint":"eslint . --ext .ts","test":"node --import tsx --test \"src/**/__tests__/*.test.ts\"","build":"tsc -p tsconfig.build.json","start":"node dist/app.js","format":"prettier --write .","prepare":"node scripts/prepare.mjs","regress":"tsx src/regression/run-all.ts","lint:fix":"eslint . --ext .ts --fix","ai:review":"tsx src/cli.ts","typecheck":"tsc --noEmit","format:check":"prettier --check .","impact:stats":"tsx src/regression/impact-stats.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"eldenring","email":"601167822@qq.com"},"repository":{"url":"https://codeup.aliyun.com/6868ea39874c52f1221c4b89/PR_Agent.git","type":"git"},"_npmVersion":"10.4.0","description":"接入阿里云 Codeup 的 AI 代码审查机器人","directories":{},"_nodeVersion":"22.19.0","dependencies":{"zod":"^3.23.8","pino":"^9.5.0","axios":"^1.7.7","dotenv":"^16.6.1","express":"^4.21.1","pino-http":"^10.3.0","@cursor/sdk":"^1.0.23"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","husky":"^9.1.6","eslint":"^8.57.1","prettier":"^3.3.3","typescript":"^5.6.3","@types/node":"^22.7.5","pino-pretty":"^11.3.0","@types/express":"^4.17.21","@commitlint/cli":"^19.5.0","eslint-config-prettier":"^9.1.0","@typescript-eslint/parser":"^8.8.1","@commitlint/config-conventional":"^19.5.0","@typescript-eslint/eslint-plugin":"^8.8.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-review_0.6.5_1786101067281_0.7264980794820415","host":"s3://npm-registry-packages-npm-production"}},"0.6.6":{"name":"@eldenring/ai-review","version":"0.6.6","description":"接入阿里云 Codeup 的 AI 代码审查机器人","type":"module","main":"dist/app.js","types":"dist/app.d.ts","bin":{"ai-review":"bin/ai-review.js"},"exports":{".":{"types":"./dist/app.d.ts","import":"./dist/app.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"repository":{"type":"git","url":"https://codeup.aliyun.com/6868ea39874c52f1221c4b89/PR_Agent.git"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">=22"},"scripts":{"dev":"tsx watch src/app.ts","ai:review":"tsx src/cli.ts","regress":"tsx src/regression/run-all.ts","impact:stats":"tsx src/regression/impact-stats.ts","build":"tsc -p tsconfig.build.json","start":"node dist/app.js","typecheck":"tsc --noEmit","test":"node --import tsx --test \"src/**/__tests__/*.test.ts\"","lint":"eslint . --ext .ts","lint:fix":"eslint . --ext .ts --fix","format":"prettier --write .","format:check":"prettier --check .","prepare":"node scripts/prepare.mjs","prepublishOnly":"npm run build"},"keywords":["codeup","ai","code-review","cursor","deepseek"],"license":"MIT","dependencies":{"@cursor/sdk":"^1.0.23","axios":"^1.7.7","dotenv":"^16.6.1","express":"^4.21.1","pino":"^9.5.0","pino-http":"^10.3.0","zod":"^3.23.8"},"devDependencies":{"@commitlint/cli":"^19.5.0","@commitlint/config-conventional":"^19.5.0","@types/express":"^4.17.21","@types/node":"^22.7.5","@typescript-eslint/eslint-plugin":"^8.8.1","@typescript-eslint/parser":"^8.8.1","eslint":"^8.57.1","eslint-config-prettier":"^9.1.0","husky":"^9.1.6","pino-pretty":"^11.3.0","prettier":"^3.3.3","tsx":"^4.19.1","typescript":"^5.6.3"},"_id":"@eldenring/ai-review@0.6.6","gitHead":"5252edb36c2dfbc1e3f9466ef5bc4e066e21e1c5","_nodeVersion":"22.19.0","_npmVersion":"10.4.0","dist":{"integrity":"sha512-KQK1yfvwRJgW/VEiuvPePHAwVlRpHtqbuCnnhqwQNHtcliskzxSk2peW6RGGvt52bO0ERuhovWOjXM/e1DsWew==","shasum":"a7967d0103bf73c62ae21d50a5b8063dd08e5eb5","tarball":"https://registry.npmjs.org/@eldenring/ai-review/-/ai-review-0.6.6.tgz","fileCount":401,"unpackedSize":1591029,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEKI8dp2v/lrAPldIemLpsyXGknMZ2PTynLFz39T9uDKAiEA6+aHZELzWGhMyXNW2sQrgD7ym0yiZDkOwwWZqQOMkkc="}]},"_npmUser":{"name":"eldenring","email":"601167822@qq.com"},"directories":{},"maintainers":[{"name":"eldenring","email":"601167822@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ai-review_0.6.6_1786104434089_0.19850882843705353"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-25T07:34:38.550Z","modified":"2026-08-07T12:07:14.414Z","0.1.1":"2026-06-25T07:34:38.851Z","0.1.2":"2026-06-25T13:39:18.505Z","0.2.0":"2026-06-29T07:30:14.268Z","0.3.0":"2026-07-01T12:33:01.933Z","0.3.1":"2026-07-06T12:02:51.674Z","0.4.0":"2026-07-09T02:18:20.347Z","0.4.1":"2026-07-09T04:02:21.466Z","0.4.2":"2026-07-09T07:19:57.156Z","0.4.3":"2026-07-09T08:09:01.259Z","0.4.5":"2026-07-10T02:55:47.270Z","0.4.6":"2026-07-10T03:30:45.722Z","0.4.7":"2026-07-10T03:50:30.662Z","0.4.8":"2026-07-15T07:47:41.822Z","0.4.9":"2026-07-17T09:27:08.809Z","0.5.0":"2026-07-24T02:51:03.115Z","0.6.0":"2026-07-24T09:47:19.041Z","0.6.1":"2026-07-24T09:53:25.529Z","0.6.2":"2026-08-07T03:05:14.703Z","0.6.3":"2026-08-07T03:55:52.632Z","0.6.4":"2026-08-07T06:49:02.720Z","0.6.5":"2026-08-07T11:11:07.436Z","0.6.6":"2026-08-07T12:07:14.276Z"},"license":"MIT","keywords":["codeup","ai","code-review","cursor","deepseek"],"repository":{"type":"git","url":"https://codeup.aliyun.com/6868ea39874c52f1221c4b89/PR_Agent.git"},"description":"接入阿里云 Codeup 的 AI 代码审查机器人","maintainers":[{"name":"eldenring","email":"601167822@qq.com"}],"readme":"# AIReview\n\n**双轨 AI 代码助手**：本地 CLI（可选深审 + 变更初稿）+ Codeup MR Webhook（**强制 L2 变更说明**）。\n\n> **产品约定**（何时审查、MR 文档优先、知识库放 `docs/changes/`）：见 [docs/PRODUCT.md](docs/PRODUCT.md)。\n>\n> **本地与 MR 审查默认走同一套 OpenAI 兼容只读 Agent**（按需读库）；CI 用 `--verify` 核验证据，也可用 `--review-if-needed` 在证据缺失或过期时现场审查。L2 变更说明仍为单次 Chat。合并硬卡点细则：见 [docs/流水线卡点配置.md](docs/流水线卡点配置.md)。\n\n```text\n本地（合前）  git diff → 只读 Agent 审查 → .ai-review/{分支}/审查发现.json → commit\nMR（必经）    Codeup MR → Webhook → L2 变更说明 + L1 索引 → MR 评论（不挡合并）\nCI 卡点（主干非 Draft MR）Flow → ai-review --verify --fail-on high → 证据无效或门禁失败则挡合并\n定稿（合并前） MR 文档誊写 → docs/changes/ → 更新 docs/INDEX.md\n```\n\n---\n\n## 装什么\n\n| 角色             | 需要安装                                                                                        | 说明                                                  |\n| ---------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------- |\n| **业务开发者**   | Node.js **22+**、pnpm、`@eldenring/ai-review`、`AI_REVIEW_LLM_API_KEY`（或 `DEEPSEEK_API_KEY`） | 在业务项目根目录跑本地审查；`cwd` 决定审哪个 Git 仓库 |\n| **Webhook 运维** | Node.js **22+**、pnpm、本仓库源码                                                               | 部署审查服务，接入 Codeup MR 事件                     |\n| **贡献本仓库**   | 同上 + 开发依赖                                                                                 | `pnpm install` 后用 `pnpm ai:review` / `pnpm dev`     |\n\n```bash\n# 业务项目：全局安装 CLI（推荐）\npnpm add -g @eldenring/ai-review\n\n# 或临时运行\npnpm dlx @eldenring/ai-review --help\n\n# Webhook 服务 / 本仓开发\ngit clone <repo> && cd AIReview && pnpm install\npnpm build && pnpm start    # 生产\npnpm dev                    # 开发（热重载）\n```\n\n---\n\n## 配什么\n\n### 本地 CLI（业务项目 `.env`，勿提交）\n\n本地 CLI 默认使用 **OpenAI 兼容只读 Agent**（不绑定特定平台；工具循环读库）；业务项目根目录 `.env` 或工具仓 `.env` 配：\n\n```env\nAI_REVIEW_LLM_API_KEY=   # 本地默认审查必填\n# AI_REVIEW_LLM_BASE_URL=https://api.deepseek.com\n# AI_REVIEW_LLM_MODEL=deepseek-chat\n# AI_REVIEW_LLM_MODE=agent   # agent(默认) | oneshot\n# AI_REVIEW_ENGINE=llm\n\n# 大 diff 分批：默认 Verify（全量 oneshot → 定向核实 → 程序裁决）\n# AI_REVIEW_BATCH_LLM_MODE=verify\n\n# 兼容别名（未设 AI_REVIEW_LLM_* 时回退）：\n# DEEPSEEK_API_KEY=\n\n# 可选 Cursor（仅 --engine cursor）：\n# CURSOR_API_KEY=\n```\n\n### Webhook 服务（部署机 `.env`，启动时校验）\n\n复制 `.env.example` 为 `.env`，填写 **服务端段**（完整项见 `.env.example`）：\n\n| 变量                                          | 必填 | 默认           | 说明                                                                |\n| --------------------------------------------- | ---- | -------------- | ------------------------------------------------------------------- |\n| `CODEUP_ACCESS_TOKEN`                         | 是   | —              | 云效个人访问令牌                                                    |\n| `CODEUP_ORGANIZATION_ID`                      | 是   | —              | 云效组织 ID                                                         |\n| `AI_REVIEW_LLM_API_KEY` 或 `DEEPSEEK_API_KEY` | 是   | —              | MR L2 文档与审查（OpenAI 兼容）                                     |\n| `PORT`                                        | 否   | `3000`         | 服务端口                                                            |\n| `LOG_LEVEL`                                   | 否   | `info`         | 日志级别                                                            |\n| `MR_DOC_ENABLED`                              | 否   | `true`         | 是否生成 L2 变更说明（**建议保持开启**）                            |\n| `MR_REVIEW_MODE`                              | 否   | `none`         | MR 审查：`none`（仅文档，**默认**）/ `multi` / `single`（显式开启） |\n| `MR_REVIEW_AGENT`                             | 否   | `true`         | 审查是否走只读 Agent（`false`=单次 Chat；不影响 L2）                |\n| `REVIEW_ONLY_ON_PUSH`                         | 否   | `true`         | `update` 事件仅在 push 新代码时触发                                 |\n| `REVIEW_DEBOUNCE_SECONDS`                     | 否   | `30`           | 同一 MR 防抖间隔（秒）                                              |\n| `DOC_SYNC_ENABLED`                            | 否   | `false`        | 是否将 L2 全文 commit 回源分支 `docs/ai/mr-{id}/`                   |\n| `DOC_SYNC_ROOT`                               | 否   | `docs/ai`      | 文档回写根目录                                                      |\n| `DOCS_AGENT_ENABLED`                          | 否   | `true`         | MR **合并**时自动归档 L2 到 `docs/changes/` 并更新 `INDEX.md`       |\n| `DOCS_CHANGES_ROOT`                           | 否   | `docs/changes` | 知识库目录                                                          |\n| `WEBHOOK_SECRET`                              | 否   | —              | 签名校验（预留）                                                    |\n\n> 本地 CLI 默认 OpenAI 兼容 LLM；CI 默认用 `--verify` 离线核验，加 `--review-if-needed` 后会在证据缺失或过期时调用模型；Webhook 用同一套 Chat API 出 L2。纯 Chat 路径会从磁盘补跨文件上下文。本地不跑 review 不影响 MR 出文档。\n\n---\n\n## MR 产出什么\n\n每个 MR（`open` / `reopen` / `update` 且 push）触发 Webhook，异步写入 **一条 MR 评论**（不阻断合并）。\n\n### 处理流程\n\n```text\n获取 MR diff\n  → 无文本变更：评论说明跳过\n  → 有变更：\n      1. L2 变更说明（优先复用 MR 内 背景和影响.md，否则 DeepSeek 生成）\n      2. L1 变更索引（文件数、模块、Top 文件）\n      3. 知识库归档提示\n      4. 文档回写状态（DOC_SYNC）\n      5. 双轨统一视图（本地/MR 审查与文档状态）\n      6. 审查结果（仅 MR_REVIEW_MODE≠none）\n```\n\n### MR 评论结构\n\n```markdown\n# 🤖 AI Review\n\n## 变更说明 ← L2（必有，对齐 docs/templates/change-note.md）\n\n## 变更索引 ← L1 文件统计附录\n\n## 知识库归档提示 ← 合并前誊写 docs/changes/ + 更新 INDEX\n\n> 文档回写: … ← DOC_SYNC 状态\n\n## 双轨统一视图 ← 本地审查 / L2 来源 / MR 审查 一览\n\n## 审查结果 ← 仅 MR_REVIEW_MODE≠none 时出现\n\n## 知识库归档结果 ← 仅归档失败时追加（合并事件）\n```\n\n### 稳定性增强（L2 质量门槛 / 归档可观测性 / 幂等）\n\n| 能力             | 行为                                                                                                                                                                                                       |\n| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **L2 质量门槛**  | L2 生成后校验必含章节（背景、改动范围、核心实现、对整体影响、验证方式）；不达标在「变更说明」下追加「⚠️ 需人工补全」，**不中断**归档                                                                       |\n| **归档可观测性** | 归档返回结构化 `status`（`success`/`failed`/`skipped`）+ `reason`（`no_l2`/`parse_failed`/`commit_failed`/`already_archived`/`disabled`/`deduped`）；**失败时**在 MR 评论追加「## 知识库归档结果」可见提示 |\n| **幂等去重**     | INDEX 条目写隐藏标记 `<!-- ai-mr:{id} ai-l2:{指纹} -->`；重复合并 / 重试按「文件名 / MR / 指纹」任一命中即跳过，失败提示按标记替换而非重复堆叠                                                             |\n\n### L2 来源优先级\n\n| 优先级 | 条件                       | 行为                                                          |\n| ------ | -------------------------- | ------------------------------------------------------------- |\n| 1      | MR diff 含 `背景和影响.md` | 直接复用（本地 `ai-review --deep --doc` 初稿）                |\n| 2      | `MR_DOC_ENABLED=true`      | DeepSeek 按 change-note 结构生成                              |\n| 失败   | JSON 解析失败等            | L2 区显示失败提示，L1 索引仍附录，**不导致 Webhook 整体失败** |\n\n### MR 审查双链路（默认 `MR_REVIEW_MODE=none`）\n\n| 情况                                                       | 行为                                  |\n| ---------------------------------------------------------- | ------------------------------------- |\n| `MR_REVIEW_MODE=none`（**默认**）                          | 仅出 L2 文档，**不调**审查            |\n| 显式 `multi`/`single`，且 MR 含 `审查发现.json` 且指纹一致 | 贴本地结论，**跳过** MR DeepSeek 审查 |\n| 显式 `multi`/`single`，无 json 或指纹不一致                | 执行 `multi` / `single` MR 审查       |\n\n### 正式知识库 vs 过程产物\n\n| 路径                              | 进 Git？     | 说明                                           |\n| --------------------------------- | ------------ | ---------------------------------------------- |\n| MR 评论中的 L2                    | 否（评论内） | 合并前人工誊写到 `docs/changes/`               |\n| `docs/changes/*.md`               | ✅           | 正式知识库                                     |\n| `.ai-review/{分支}/审查发现.json` | ✅           | 门禁证据；合入主干前须提交，供 CI `--verify`   |\n| `.ai-review/{分支}/审查发现.md`   | ❌           | 本地阅读 / 标注                                |\n| `.ai-review/{分支}/背景和影响.md` | ❌           | 本地初稿；定稿后写入 `changes/`                |\n| `docs/ai/mr-*/`                   | 视配置       | `DOC_SYNC_ENABLED=true` 时回写；合并后建议删除 |\n\n---\n\n## 快速开始（CLI）\n\n在**业务项目根目录**执行：\n\n```bash\nai-review --deep\n# 通过后提交证据：\n# git add .ai-review/$(git branch --show-current)/审查发现.json\n# CI：ai-review --verify\n```\n\n- 退出码 `0`：门禁通过，可以 push\n- 退出码 `1`：门禁未通过，或审查/解析失败\n\n变更说明初稿（可选，可被 MR local-bridge 复用）：\n\n```bash\nai-review --deep --doc    # → .ai-review/{分支}/背景和影响.md\n```\n\n---\n\n## CLI 用法\n\n### 命令总览\n\n| 命令                                       | 说明                                           |\n| ------------------------------------------ | ---------------------------------------------- |\n| `ai-review --deep`                         | 运行 AI 审查（本地合前）                       |\n| `ai-review --verify`                       | 仅核验已提交的 `审查发现.json`（默认不调模型） |\n| `ai-review --verify --review-if-needed`    | CI 缺少 json 或证据过期时调用模型现场审查      |\n| `ai-review --verify --publish-comment`     | 将核验/审查报告发布或更新到 Codeup MR 全局评论 |\n| `ai-review annotate list`                  | 列出所有问题及编号                             |\n| `ai-review annotate --index N --as <状态>` | 命令行标注（可选）                             |\n| `ai-review --help`                         | 审查帮助                                       |\n| `ai-review annotate --help`                | 标注帮助                                       |\n\n### 审查参数\n\n| 参数                | 默认值          | 说明                                                                                          |\n| ------------------- | --------------- | --------------------------------------------------------------------------------------------- |\n| `--deep`            | —               | 本地合前审查                                                                                  |\n| `--verify`          | —               | CI 核验已提交的 `审查发现.json`；配合 `--review-if-needed` 可缺失或过期时现场审查             |\n| `--publish-comment` | —               | 发布/更新 Codeup MR 全局评论；需配置 `AI_REVIEW_PROJECT_ID`、`AI_REVIEW_MR_ID` 及 `CODEUP_*`  |\n| `--engine <引擎>`   | `llm`           | 审查引擎：`llm`（OpenAI 兼容）/ `cursor`；`deepseek` 为 `llm` 别名；也可用 `AI_REVIEW_ENGINE` |\n| `--fail-on <级别>`  | `high`          | 门禁拦截级别，见下文                                                                          |\n| `--base <分支>`     | `origin/master` | diff 对比基准                                                                                 |\n| `--scope <范围>`    | `branch`        | `branch` / `staged` / `working` / `head`                                                      |\n| `--path <路径>`     | 全仓库          | 仅审查指定路径下的变更                                                                        |\n| `--file <路径>`     | —               | 仅审查单文件（快速审）                                                                        |\n| `--name <名称>`     | 当前分支名      | 覆盖 `.ai-review/` 下的报告文件夹名                                                           |\n| `--doc`             | 关闭            | 额外生成 `背景和影响.md`（适合 MR 定稿归档）                                                  |\n| `--force`           | 关闭            | 全量重审（重新调用 AI 引擎）；**保留** md/json 中的人工标注                                   |\n| `--recheck`         | —               | 与默认行为相同；已有报告且 commit 变化时**自动增量复检**                                      |\n| `-h` / `--help`     | —               | 显示帮助                                                                                      |\n\n### 常用示例\n\n```bash\n# 合入 master 前（默认相对 origin/master）\ngit fetch origin master\nai-review --deep\n\n# CI / 本地核验\nai-review --verify\n\n# CI 核验失败或现场审查后，把报告贴到 MR 评论（发布失败不改变门禁结果）\nai-review --verify --review-if-needed --publish-comment\n\n# 可选：改用 Cursor SDK（需 CURSOR_API_KEY）\nai-review --deep --engine cursor\n\n# commit 前最后一眼（仅 staged）\nai-review --deep --scope staged\n\n# 审查工作区未提交改动\nai-review --deep --scope working\n\n# 最近一次 commit 粒度\nai-review --deep --scope head\n\n# 单文件快速审（工作区）\nai-review --deep --scope working --file src/api/user.ts\n\n# 覆盖默认基准（极少需要）\nai-review --deep --base origin/main\n\n# 只审查 src/api 目录\nai-review --deep --path src/api\n\n# 全量重审（忽略缓存与旧报告）\nai-review --deep --force\n\n# 审查 + 生成变更说明文档\nai-review --deep --doc\n\n# 更严格的门禁（公共 medium 也拦截）\nai-review --deep --fail-on medium\n```\n\n### 运行中交互\n\n- 审查过程支持**流式输出**（TTY 下可见进度）\n- 按 **Ctrl+C** 可中断审查\n\n---\n\n## 审查报告\n\n报告固定写入：\n\n```text\n.ai-review/{分支名}/\n├── 审查发现.md      # 人类可读报告\n├── 审查发现.json    # 结构化缓存（门禁与增量复检的数据源）\n└── 背景和影响.md    # 仅 --doc 时生成\n```\n\n同分支多次审查会**覆盖更新**同一目录（不再按 commit 分子目录）。\n\n### 知识库与 Git 提交\n\n正式工程知识库在 **`docs/changes/`**（每需求一篇，纳入 Git）。本地审查：\n\n| 路径                              | 进 Git？                           |\n| --------------------------------- | ---------------------------------- |\n| `docs/changes/*.md`               | ✅ 正式知识库                      |\n| `.ai-review/{分支}/审查发现.json` | ✅ 合前必提交（CI `--verify`）     |\n| `.ai-review/{分支}/审查发现.md`   | ❌                                 |\n| `.ai-review/{分支}/背景和影响.md` | ❌ 本地初稿，定稿后写入 `changes/` |\n\n`.gitignore` 已忽略 md / 背景初稿，**允许** json。详见 [docs/流水线卡点配置.md](docs/流水线卡点配置.md) 与 [docs/WORKFLOW.md](docs/WORKFLOW.md)。\n\n### 报告结构说明\n\n`审查发现.md` 大致分为：\n\n1. **概览** — 门禁结论、进度、风险分布（一张表）\n2. **公共与系统影响** — 门禁判定的主要依据\n3. **待处理** — 按公共/局部分组，位置可点击跳转代码\n4. **已修复** — 增量复检时相对上次已消失的问题\n5. **已标注** — 人工确认可忽略的项，不参与门禁\n\n每条问题格式简洁：可点击位置 + 严重度 + 描述，建议以引用块展示。标注说明在文档末尾。\n\n---\n\n## 门禁规则\n\n审查策略为**两条线并行**：\n\n| 类型      | scope    | 行为                                   |\n| --------- | -------- | -------------------------------------- |\n| 公共/系统 | `shared` | **重点关注**，高严重度可阻断 push      |\n| 局部功能  | `local`  | **全面排查**，列出问题但默认不单独阻断 |\n\n### `--fail-on` 拦截级别\n\n| 值             | 行为                                                                 |\n| -------------- | -------------------------------------------------------------------- |\n| `high`（默认） | `systemImpact.overallRisk=high`，或 **shared + high** finding → 拦截 |\n| `medium`       | 上述 + `overallRisk=medium` 或 shared medium → 拦截                  |\n| `any`          | 任意公共影响或任意 finding → 拦截                                    |\n| `none`         | 永不拦截（仅生成报告）                                               |\n\n> **local 级问题**无论 severity 多高，在默认 `fail-on=high` 下**不单独阻断** push。\n\n---\n\n## 缓存与增量复检\n\n| 场景                 | 行为                                                         |\n| -------------------- | ------------------------------------------------------------ |\n| 同 commit 再次运行   | 跳过模型调用，直接使用已有报告（会先同步 md 标注）           |\n| 新 commit + 已有报告 | **自动增量复检**：核对旧问题 + 扫描新 diff                   |\n| `--force`            | 全量重审（重新调用 AI 引擎）；**保留**人工标注，不需重新标注 |\n\n增量复检时会：\n\n- 保留人工标注（同文件同行或相同问题描述）\n- 将已修复项写入「已修复」节\n- 已标注项不会再次参与门禁\n\n---\n\n## 人工标注（推荐：在 Markdown 里写）\n\n**推荐**直接在 `审查发现.md` 里标注，比命令行更方便。保存后，下次运行 `ai-review --deep` 会**自动从 md 同步到 json**。\n\n### 写法\n\n在对应问题下方加一行（与「建议」同级缩进）：\n\n```markdown\n- `src/foo.ts:42` `[局部]` — **某问题描述**\n  - 建议: 改成 xxx\n  - @wontfix 设计如此，不需要改\n```\n\n### 支持的关键词\n\n| 关键词      | 含义           | 别名              |\n| ----------- | -------------- | ----------------- |\n| `@wontfix`  | 不需要修改     | `@nofix`、`@skip` |\n| `@fp`       | 误报           | `@false_positive` |\n| `@deferred` | 延后处理       | `@later`          |\n| `@accepted` | 已知风险可接受 | `@accept`         |\n| `@open`     | 恢复为待处理   | —                 |\n\n也支持中文标签：`@不需要修改`、`@误报`、`@延后处理`、`@已知风险可接受`。\n\n### 标注示例\n\n```markdown\n- @fp 测试数据，不是真漏洞\n- @wontfix 与上游约定保持一致\n- @accepted 已知性能问题，下版本优化\n- @deferred 等需求确认后再改\n- @open\n```\n\n同步成功后，条目会移到「已标注」分区；终端会提示：`已从 审查发现.md 同步 N 条标注`。\n\n### 标注注意事项\n\n- `@` 行必须写在**对应问题块**下面，系统按 `` `文件:行号` `` 匹配\n- 仅改 md 里普通文字备注**不会**生效，必须用 `@关键词` 格式\n- `审查发现.json` 是机器数据源；md 标注会自动写回 json\n- 已标注项**不参与门禁**，增量复检时也不会重复拦截\n\n---\n\n## 命令行标注（可选）\n\n不习惯改 md 时，可用 `annotate` 子命令，效果与 md 标注相同。\n\n```bash\n# 列出编号\nai-review annotate list\n\n# 按编号标注\nai-review annotate --index 2 --as wontfix --reason \"设计如此\"\n\n# 按文件定位\nai-review annotate --file src/a.ts --line 10 --as false_positive\n\n# 恢复为待处理\nai-review annotate --index 1 --as open\n```\n\n### `--as` 可选值\n\n| 值               | 含义           |\n| ---------------- | -------------- |\n| `wontfix`        | 不需要修改     |\n| `false_positive` | 误报           |\n| `deferred`       | 延后处理       |\n| `accepted`       | 已知风险可接受 |\n| `open`           | 恢复为待处理   |\n\n---\n\n## 使用注意事项\n\n1. **MR 必经、本地可选** — 每个 MR 自动出 L2 变更说明；本地 `ai-review` 在提 MR / push 前、动公共模块时再跑。详见 [docs/PRODUCT.md](docs/PRODUCT.md)。\n2. **默认合前门禁** — `--deep` / `--verify` 默认 `--scope branch --base origin/master --fail-on high`。\n3. **`--deep` 或 `--verify`** — 不带二者只会打印帮助；CI 用 `--verify`，本地合前用 `--deep`。\n4. **基准要存在** — 先 `git fetch origin master`；其他基线用 `--base` 覆盖。\n5. **同提交不重复调模型** — 同一 commit 重复运行会直接读缓存；改完 md 标注后重新运行即可同步，无需 `--force`。\n6. **需要彻底重审时再用 `--force`** — 会重新调用 AI 引擎；你在 md/json 里的 `@标注` 会自动保留，不必重标。\n7. **局部问题不挡 push（默认）** — 默认 `fail-on=high` 只拦公共高风险；若希望更严，用 `--fail-on medium` 或 `any`。\n8. **标注请用 `@关键词`** — 在 md 里写普通备注不会被识别；`annotate` 命令与 md 标注二选一即可。\n9. **合前须提交 json** — `.ai-review/{分支}/审查发现.json` 是 CI 门禁证据；md / 背景初稿勿提交。正式知识库见 `docs/changes/`。\n10. **`.env` 不要提交** — 尤其 `AI_REVIEW_LLM_API_KEY`、`DEEPSEEK_API_KEY`、`CURSOR_API_KEY`、Codeup 密钥。\n11. **解析失败视为未通过** — 本地审查模型未按 JSON 格式返回时，门禁不通过，可查看报告内「原始输出」或 `--force` 重试。\n12. **MR 不挡合并** — Webhook 只写评论；硬卡点走 CI `--verify`。\n\n---\n\n## 环境变量参考\n\n完整示例见 `.env.example`。上文 [配什么](#配什么) 已列出 Webhook 关键项；下表为 CLI 补充。\n\n### 本地 CLI\n\n| 变量                                  | 必填                     | 说明                                                                   |\n| ------------------------------------- | ------------------------ | ---------------------------------------------------------------------- |\n| `AI_REVIEW_LLM_API_KEY`               | 默认引擎必填             | OpenAI 兼容 API Key（本地默认审查引擎）                                |\n| `AI_REVIEW_LLM_BASE_URL`              | 否                       | 默认 `https://api.deepseek.com`（可改为任意兼容端点）                  |\n| `AI_REVIEW_LLM_MODEL`                 | 否                       | 默认 `deepseek-chat`                                                   |\n| `AI_REVIEW_ENGINE`                    | 否                       | `llm`（默认）或 `cursor`；`deepseek` 为 `llm` 别名                     |\n| `DEEPSEEK_API_KEY`                    | 兼容别名                 | 未设 `AI_REVIEW_LLM_API_KEY` 时回退                                    |\n| `DEEPSEEK_BASE_URL`                   | 否                       | 兼容别名                                                               |\n| `DEEPSEEK_MODEL`                      | 否                       | 兼容别名                                                               |\n| `CURSOR_API_KEY`                      | `--engine cursor` 时必填 | Cursor SDK API Key                                                     |\n| `CURSOR_MODEL`                        | 否                       | 默认 `auto`（原样传 SDK）；可写具体模型 id                             |\n| `AI_REVIEW_BATCH_LLM_MODE`            | 否                       | 默认 `verify`；`hybrid` / `hybrid-legacy` 仅兼容归一为 `verify`        |\n| `AI_REVIEW_BATCH_ONESHOT_CONCURRENCY` | 否                       | 默认 `2`；Verify 阶段 oneshot 并发上限                                 |\n| `AI_REVIEW_BATCH_AGENT_CONCURRENCY`   | 否                       | 默认 `1`；Verify 阶段定向核实 Agent 并发上限                           |\n| `AI_REVIEW_BATCH_MAX_RETRIES`         | 否                       | 大 diff 自动分批时单批最大重试次数（不含首次，默认 `0`）               |\n| `AI_REVIEW_PROJECT_ID`                | 否                       | CI 门禁拉 MR 评论豁免用（见 [流水线卡点配置](docs/流水线卡点配置.md)） |\n| `AI_REVIEW_MR_ID`                     | 否                       | 同上                                                                   |\n| `CODEUP_ACCESS_TOKEN`                 | 发布评论时必填           | Codeup API 访问令牌                                                    |\n| `CODEUP_ORGANIZATION_ID`              | 发布评论时必填           | Codeup 组织 ID                                                         |\n\n#### 大变更覆盖式分批（自动）\n\n当可审查 diff 无法安全落入单轮预算时，本地 `--deep` **自动**进入分批模式（无需新 engine；仍用 `llm`/`cursor`）：\n\n- 默认执行 Verify：所有批次先由 oneshot 完成覆盖，再由 Candidate Ledger 汇总候选并进入有界 verification Agent 队列；不再按批次风险直接切换到 Hybrid Agent。\n- 注意：`AI_REVIEW_BATCH_LLM_MODE=verify` 是本地大 diff 的批量调度模式；命令行 `ai-review --verify` 仍表示 CI 离线核验已提交的 JSON，不会调用模型。\n- 每个变更 hunk 恰好主审一次；报告 JSON 含 `coverage` / `batchRuns`。\n- `coverage.status=complete` 且 `parsedOk=true` 才可作为 CI 成功证据；**partial/incomplete 不可当成功**。\n- 批次可按 `executionFingerprint` 复用；旧 v1 无 coverage 的同提交缓存不会短路大 diff。\n- 成本随批次数增加；可用 `AI_REVIEW_BATCH_MAX_RETRIES` 控制瞬时失败重试（默认 `0`）。\n- **不改变** `MR_REVIEW_MODE=none` 产品约定。\n\n### Webhook 服务（可选）\n\n启动 `pnpm dev` / `pnpm start` 时，除上表 Webhook 变量外，还需 `CODEUP_*` 与 `AI_REVIEW_LLM_*`（或 `DEEPSEEK_*`）（见 [配什么](#配什么)）。\n\n---\n\n## Webhook 服务部署\n\n除本地 CLI 外，部署本仓库可接入 Codeup MR 自动文档与审查：\n\n```text\nCodeup MR 事件 → POST /webhook/codeup → 异步 L2 + 可选审查 → 回写 MR 评论\n```\n\n```bash\npnpm dev                    # 开发模式\npnpm build && pnpm start    # 生产模式\n```\n\n- 健康检查：`GET /health`\n- Webhook：`POST /webhook/codeup`\n- 收到 MR 事件后异步处理，立即返回 `202`\n- 产出结构见上文 [MR 产出什么](#mr-产出什么)\n\nCodeup 侧配置 Webhook URL 指向 `https://<host>/webhook/codeup`，事件勾选合并请求相关动作。\n\n---\n\n## 开发脚本\n\n本仓库内开发（无需全局安装）：\n\n```bash\npnpm install\npnpm ai:review --deep   # 本地 CLI（tsx 直跑源码）\npnpm dev                # Webhook 服务开发模式\npnpm build              # 编译\npnpm start              # 运行编译产物\npnpm typecheck          # 类型检查\npnpm lint               # ESLint\npnpm format             # Prettier 格式化\n```\n\n维护者发布 npm 包见 [docs/PUBLISH.md](docs/PUBLISH.md)。\n\n## License\n\nMIT\n","readmeFilename":"README.md"}