{"_id":"claude-code-model-router","_rev":"34-3ee938657d0f0df912198a8bfd59b140","name":"claude-code-model-router","dist-tags":{"latest":"1.21.0"},"versions":{"1.0.0":{"name":"claude-code-model-router","version":"1.0.0","keywords":["claude","claude-code","ai","llm","gateway","router","deepseek","qwen","kimi"],"author":{"name":"luwill"},"license":"MIT","_id":"claude-code-model-router@1.0.0","maintainers":[{"name":"louwill","email":"ygnjd2016@gmail.com"}],"homepage":"https://github.com/luwill/Claude-Code-Model-Router#readme","bugs":{"url":"https://github.com/luwill/Claude-Code-Model-Router/issues"},"bin":{"ccmr":"dist/cli.js","claude-code-model-router":"dist/cli.js"},"dist":{"shasum":"d64dd657c8eb7d6dd05038b6e8ae210050736130","tarball":"https://registry.npmjs.org/claude-code-model-router/-/claude-code-model-router-1.0.0.tgz","fileCount":26,"integrity":"sha512-s932OdahmWpHofrwMouZL4vciR3paveMwOOIeGjAKkBSGNHxxAraVXphPu6nvN4xexmB6O7t1ME9+GjgaThQsA==","signatures":[{"sig":"MEUCICzTYGlCt3CftK3bqpFnSLeqxJu7YgMrIQ8GKUJdZZnRAiEA6MV7z3qldW3EPvSv+/EuHUbreqnA2KfS4rCeLKRTdzk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":75664},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"cea8a31a1676d80eb41ec3f8347eeaee49e5bcb4","scripts":{"dev":"ts-node src/cli.ts start","build":"tsc","clean":"rimraf dist","start":"node dist/cli.js start","prepublishOnly":"npm run build"},"_npmUser":{"name":"louwill","email":"ygnjd2016@gmail.com"},"repository":{"url":"git+https://github.com/luwill/Claude-Code-Model-Router.git","type":"git"},"_npmVersion":"10.9.2","description":"A lightweight API gateway for routing Claude Code requests to multiple AI models","directories":{},"_nodeVersion":"22.13.0","dependencies":{"chalk":"^5.3.0","dotenv":"^16.4.5","express":"^4.21.0","js-yaml":"^4.1.0","commander":"^12.1.0","node-fetch":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.7","ts-node":"^10.9.2","typescript":"^5.4.5","@types/node":"^20.14.0","@types/express":"^4.17.21","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-model-router_1.0.0_1764899149181_0.2820035387820854","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"claude-code-model-router","version":"1.0.1","keywords":["claude","claude-code","ai","llm","gateway","router","deepseek","qwen","kimi"],"author":{"name":"luwill"},"license":"MIT","_id":"claude-code-model-router@1.0.1","maintainers":[{"name":"louwill","email":"ygnjd2016@gmail.com"}],"homepage":"https://github.com/luwill/Claude-Code-Model-Router#readme","bugs":{"url":"https://github.com/luwill/Claude-Code-Model-Router/issues"},"bin":{"ccmr":"dist/cli.js","claude-code-model-router":"dist/cli.js"},"dist":{"shasum":"816dd24cea6cfbf4440d09a837d9e257eb7f746b","tarball":"https://registry.npmjs.org/claude-code-model-router/-/claude-code-model-router-1.0.1.tgz","fileCount":26,"integrity":"sha512-CeO7HOhi8D7+u2KtczwTlIoQ26kY+vdjTjXOySy3Wd8K7nTsTa5ntX8/IExjqteul5/GbiI1+9bB679sKrMSCA==","signatures":[{"sig":"MEYCIQDA59vlvipgZTkEpuz2YIyE9IVwde8VeDOE9c8/Ylgb6gIhAP0i5wVcK+ZZ/vV4nw5opsHqhs4dD/DIRxBxP8S3LLR3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":84853},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"d6dabaadc38d6a3e308ca6d313343a1216a16816","scripts":{"dev":"ts-node src/cli.ts start","build":"tsc","clean":"rimraf dist","start":"node dist/cli.js start","prepublishOnly":"npm run build"},"_npmUser":{"name":"louwill","email":"ygnjd2016@gmail.com"},"repository":{"url":"git+https://github.com/luwill/Claude-Code-Model-Router.git","type":"git"},"_npmVersion":"10.9.2","description":"A lightweight API gateway for routing Claude Code requests to multiple AI models","directories":{},"_nodeVersion":"22.13.0","dependencies":{"chalk":"^5.3.0","dotenv":"^16.4.5","express":"^4.21.0","js-yaml":"^4.1.0","commander":"^12.1.0","node-fetch":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.7","ts-node":"^10.9.2","typescript":"^5.4.5","@types/node":"^20.14.0","@types/express":"^4.17.21","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-model-router_1.0.1_1765418480597_0.8599167439987221","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"claude-code-model-router","version":"1.1.0","keywords":["claude","claude-code","ai","llm","gateway","router","deepseek","qwen","kimi"],"author":{"name":"luwill"},"license":"MIT","_id":"claude-code-model-router@1.1.0","maintainers":[{"name":"louwill","email":"ygnjd2016@gmail.com"}],"homepage":"https://github.com/luwill/Claude-Code-Model-Router#readme","bugs":{"url":"https://github.com/luwill/Claude-Code-Model-Router/issues"},"bin":{"ccmr":"dist/cli.js","claude-code-model-router":"dist/cli.js"},"dist":{"shasum":"19920a7f014af140d24ff190c4402b47836044a6","tarball":"https://registry.npmjs.org/claude-code-model-router/-/claude-code-model-router-1.1.0.tgz","fileCount":26,"integrity":"sha512-fMN8ODBRZ+vj5aGX9v920zOrW2f6qHYL7fTtDLsGoXCrVCVOPfnVLcj6rUUvkvjdh63b0sBIUKRGzeRo4z15Jg==","signatures":[{"sig":"MEUCIQDxUQKRpQa9u0cyvF81wD9YZUx06khYkLio8mPBPz5lPwIgclLnzSSd7rGU++2ESOzSUps6KHXoO92ID/nCpqnjKzA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":86890},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"d756638d006fd45948b26aa952b5a46fad767a75","scripts":{"dev":"ts-node src/cli.ts start","build":"tsc","clean":"rimraf dist","start":"node dist/cli.js start","prepublishOnly":"npm run build"},"_npmUser":{"name":"louwill","email":"ygnjd2016@gmail.com"},"repository":{"url":"git+https://github.com/luwill/Claude-Code-Model-Router.git","type":"git"},"_npmVersion":"10.9.2","description":"A lightweight API gateway for routing Claude Code requests to multiple AI models","directories":{},"_nodeVersion":"22.13.0","dependencies":{"chalk":"^5.3.0","dotenv":"^16.4.5","express":"^4.21.0","js-yaml":"^4.1.0","commander":"^12.1.0","node-fetch":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.7","ts-node":"^10.9.2","typescript":"^5.4.5","@types/node":"^20.14.0","@types/express":"^4.17.21","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-model-router_1.1.0_1766480770661_0.09703224718055048","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"claude-code-model-router","version":"1.2.0","keywords":["claude","claude-code","ai","llm","gateway","router","deepseek","qwen","kimi"],"author":{"name":"luwill"},"license":"MIT","_id":"claude-code-model-router@1.2.0","maintainers":[{"name":"louwill","email":"ygnjd2016@gmail.com"}],"homepage":"https://github.com/luwill/Claude-Code-Model-Router#readme","bugs":{"url":"https://github.com/luwill/Claude-Code-Model-Router/issues"},"bin":{"ccmr":"dist/cli.js","claude-code-model-router":"dist/cli.js"},"dist":{"shasum":"f053ed961e1f6a6cf3a2ca7920508c73c200e413","tarball":"https://registry.npmjs.org/claude-code-model-router/-/claude-code-model-router-1.2.0.tgz","fileCount":26,"integrity":"sha512-9xFhv0n205rkIzu3qNCC2Sol2a4LyW9hTCBgWVyibfvJExf/DuXeBZ4t5mNVOTOJBeHRlMXn7EG8N+zk+Qi2wQ==","signatures":[{"sig":"MEUCIQC3cYtRNqfvd2SLEN3c1HqwnBx33KqVscF0PPWaWpVLggIge58EoqU74P2oTSHknM7yRAU6O7p3WbeHWZHezmcPjQI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87130},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"38e9cb20394cc7adca984e0b0b3320bf6776d4f1","scripts":{"dev":"ts-node src/cli.ts start","build":"tsc","clean":"rimraf dist","start":"node dist/cli.js start","prepublishOnly":"npm run build"},"_npmUser":{"name":"louwill","email":"ygnjd2016@gmail.com"},"repository":{"url":"git+https://github.com/luwill/Claude-Code-Model-Router.git","type":"git"},"_npmVersion":"10.9.2","description":"A lightweight API gateway for routing Claude Code requests to multiple AI models","directories":{},"_nodeVersion":"22.13.0","dependencies":{"chalk":"^5.3.0","dotenv":"^16.4.5","express":"^4.21.0","js-yaml":"^4.1.0","commander":"^12.1.0","node-fetch":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.7","ts-node":"^10.9.2","typescript":"^5.4.5","@types/node":"^20.14.0","@types/express":"^4.17.21","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-model-router_1.2.0_1773639595420_0.8009620892316702","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"claude-code-model-router","version":"1.2.1","keywords":["claude","claude-code","ai","llm","gateway","router","deepseek","qwen","kimi"],"author":{"name":"luwill"},"license":"MIT","_id":"claude-code-model-router@1.2.1","maintainers":[{"name":"louwill","email":"ygnjd2016@gmail.com"}],"homepage":"https://github.com/luwill/Claude-Code-Model-Router#readme","bugs":{"url":"https://github.com/luwill/Claude-Code-Model-Router/issues"},"bin":{"ccmr":"dist/cli.js","claude-code-model-router":"dist/cli.js"},"dist":{"shasum":"98dbc89c881df54ca15151fae23c00449e18a4fe","tarball":"https://registry.npmjs.org/claude-code-model-router/-/claude-code-model-router-1.2.1.tgz","fileCount":26,"integrity":"sha512-dpeOz7+gELsxT9cvE1fFJ0OecJyCWINOwTMvH5PqFfdTYBaMZVB1cRqyyetL+fEDFcZWLWDbNGBMWuLW3IVj5g==","signatures":[{"sig":"MEUCIQCIQjZdJq/sGDfziAK8xh6B73W3F15fAsBzHG5A/hLyogIgNZW8qU9OCAudSwPUJcCTynwIvLxbpOK03ELXdNXH6Ks=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87130},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"0432181e9761ea3a83583753cd63b1d8102f7914","scripts":{"dev":"ts-node src/cli.ts start","build":"tsc","clean":"rimraf dist","start":"node dist/cli.js start","prepublishOnly":"npm run build"},"_npmUser":{"name":"louwill","email":"ygnjd2016@gmail.com"},"repository":{"url":"git+https://github.com/luwill/Claude-Code-Model-Router.git","type":"git"},"_npmVersion":"10.9.2","description":"A lightweight API gateway for routing Claude Code requests to multiple AI models","directories":{},"_nodeVersion":"22.13.0","dependencies":{"chalk":"^5.3.0","dotenv":"^16.4.5","express":"^4.21.0","js-yaml":"^4.1.0","commander":"^12.1.0","node-fetch":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.7","ts-node":"^10.9.2","typescript":"^5.4.5","@types/node":"^20.14.0","@types/express":"^4.17.21","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-model-router_1.2.1_1773798440390_0.04610889762929693","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"claude-code-model-router","version":"1.2.2","keywords":["claude","claude-code","ai","llm","gateway","router","deepseek","qwen","kimi"],"author":{"name":"luwill"},"license":"MIT","_id":"claude-code-model-router@1.2.2","maintainers":[{"name":"louwill","email":"ygnjd2016@gmail.com"}],"homepage":"https://github.com/luwill/Claude-Code-Model-Router#readme","bugs":{"url":"https://github.com/luwill/Claude-Code-Model-Router/issues"},"bin":{"ccmr":"dist/cli.js","claude-code-model-router":"dist/cli.js"},"dist":{"shasum":"8a4b7bc9ab5031af83aefb8cc5087a087d96e61e","tarball":"https://registry.npmjs.org/claude-code-model-router/-/claude-code-model-router-1.2.2.tgz","fileCount":26,"integrity":"sha512-+TBpDXx8lj6F2LMUeq0uRmltqp1dry1JdWOejr9UspMryEWI9MM6J6dXhK1SZqwG5mkcdFNAxYwDijU56URVQQ==","signatures":[{"sig":"MEQCIH/jDSesAuJ4QHKkHEeYn5wjv/hp85ZviL68Mjq/rlB1AiAeEwUKdrUIuLAQqEtwNZpzdTKyl1DeTRugd8s9CFAjiw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":88882},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"31a27b84e970ebd61e95590f66bd843da68c4194","scripts":{"dev":"ts-node src/cli.ts start","build":"tsc","clean":"rimraf dist","start":"node dist/cli.js start","prepublishOnly":"npm run build"},"_npmUser":{"name":"louwill","email":"ygnjd2016@gmail.com"},"repository":{"url":"git+https://github.com/luwill/Claude-Code-Model-Router.git","type":"git"},"_npmVersion":"10.9.2","description":"A lightweight API gateway for routing Claude Code requests to multiple AI models","directories":{},"_nodeVersion":"22.17.0","dependencies":{"chalk":"^5.3.0","dotenv":"^16.4.5","express":"^4.21.0","js-yaml":"^4.1.0","commander":"^12.1.0","node-fetch":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.7","ts-node":"^10.9.2","typescript":"^5.4.5","@types/node":"^20.14.0","@types/express":"^4.17.21","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-model-router_1.2.2_1774623893215_0.7444451339869154","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"claude-code-model-router","version":"1.2.3","keywords":["claude","claude-code","ai","llm","gateway","router","deepseek","qwen","kimi"],"author":{"name":"luwill"},"license":"MIT","_id":"claude-code-model-router@1.2.3","maintainers":[{"name":"louwill","email":"ygnjd2016@gmail.com"}],"homepage":"https://github.com/luwill/Claude-Code-Model-Router#readme","bugs":{"url":"https://github.com/luwill/Claude-Code-Model-Router/issues"},"bin":{"ccmr":"dist/cli.js","claude-code-model-router":"dist/cli.js"},"dist":{"shasum":"162b602a6c7e147bb614bee00a2d3ad269487d65","tarball":"https://registry.npmjs.org/claude-code-model-router/-/claude-code-model-router-1.2.3.tgz","fileCount":26,"integrity":"sha512-Skc+2HeaV5M3jMpK66dIKngnvkJQMAuTAA0cDF0NMTYTwAbJzwg00T+NyLUKvYqI1eEe2IKo8xWjlvsE3CtbRA==","signatures":[{"sig":"MEYCIQDP2PQAVvyKRMu81cvk5G6ZxC0O8g/ZQ2FIwI5qjWX0agIhAMTfAtZMBNdGZmRROgkYKB4YzoItclLPABIGd0YZVjic","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":88885},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"9f8ceb617f21405bf0f29090a514c5f7c29227d8","scripts":{"dev":"ts-node src/cli.ts start","build":"tsc","clean":"rimraf dist","start":"node dist/cli.js start","prepublishOnly":"npm run build"},"_npmUser":{"name":"louwill","email":"ygnjd2016@gmail.com"},"repository":{"url":"git+https://github.com/luwill/Claude-Code-Model-Router.git","type":"git"},"_npmVersion":"10.9.2","description":"A lightweight API gateway for routing Claude Code requests to multiple AI models","directories":{},"_nodeVersion":"22.17.0","dependencies":{"chalk":"^5.3.0","dotenv":"^16.4.5","express":"^4.21.0","js-yaml":"^4.1.0","commander":"^12.1.0","node-fetch":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.7","ts-node":"^10.9.2","typescript":"^5.4.5","@types/node":"^20.14.0","@types/express":"^4.17.21","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-model-router_1.2.3_1774625872727_0.8618674393580978","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"claude-code-model-router","version":"1.3.0","keywords":["claude","claude-code","ai","llm","gateway","router","deepseek","qwen","kimi"],"author":{"name":"luwill"},"license":"MIT","_id":"claude-code-model-router@1.3.0","maintainers":[{"name":"louwill","email":"ygnjd2016@gmail.com"}],"homepage":"https://github.com/luwill/Claude-Code-Model-Router#readme","bugs":{"url":"https://github.com/luwill/Claude-Code-Model-Router/issues"},"bin":{"ccmr":"dist/cli.js","claude-code-model-router":"dist/cli.js"},"dist":{"shasum":"c238852be22889d822e2fa8ee6ac8e25653c7993","tarball":"https://registry.npmjs.org/claude-code-model-router/-/claude-code-model-router-1.3.0.tgz","fileCount":26,"integrity":"sha512-4gZ2tiEK8Q7e80i6vgxs/2TerYdIt/7YRCgav/NkUr/fAuoveN/fCqXX36IFmzHHtpzZWxbLD3/XB7w0Sn06tg==","signatures":[{"sig":"MEYCIQDKvJTxqC9AW9RrwU0L1DwkldSKFgI3DwtPyX+sdN7hiwIhAJ/FLd5QR0wkOrjkYmpJ3LhspamJMc+xnoqovHMDHU1K","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":103358},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"e81edd68c2c854c7f448e93c167e5abf9aa81435","scripts":{"dev":"ts-node src/cli.ts start","build":"tsc","clean":"rimraf dist","start":"node dist/cli.js start","prepublishOnly":"npm run build"},"_npmUser":{"name":"louwill","email":"ygnjd2016@gmail.com"},"repository":{"url":"git+https://github.com/luwill/Claude-Code-Model-Router.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight API gateway for routing Claude Code requests to multiple AI models","directories":{},"_nodeVersion":"24.14.0","dependencies":{"chalk":"^5.3.0","dotenv":"^16.4.5","express":"^4.21.0","js-yaml":"^4.1.0","commander":"^12.1.0","node-fetch":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.7","ts-node":"^10.9.2","typescript":"^5.4.5","@types/node":"^20.14.0","@types/express":"^4.17.21","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-model-router_1.3.0_1777372801136_0.13578350867200406","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"claude-code-model-router","version":"1.3.1","keywords":["claude","claude-code","ai","llm","gateway","router","deepseek","qwen","kimi"],"author":{"name":"luwill"},"license":"MIT","_id":"claude-code-model-router@1.3.1","maintainers":[{"name":"louwill","email":"ygnjd2016@gmail.com"}],"homepage":"https://github.com/luwill/Claude-Code-Model-Router#readme","bugs":{"url":"https://github.com/luwill/Claude-Code-Model-Router/issues"},"bin":{"ccmr":"dist/cli.js","claude-code-model-router":"dist/cli.js"},"dist":{"shasum":"e9a0d0b977aedd5a25c72df7788f4e6ecccfcf87","tarball":"https://registry.npmjs.org/claude-code-model-router/-/claude-code-model-router-1.3.1.tgz","fileCount":26,"integrity":"sha512-JozhXtg3Cfw/2fHzl2I9gDzWgFBVBcixCSWkrsFfdxuCeIQ3nhq/sgN8GaJfLp5dBq7NwIKq77s3eG6iOoICXQ==","signatures":[{"sig":"MEUCIQDuP4QrfsRDxN3chTBAx6fiqhVszu9d65IoNLEkHb1zdQIgSKqwAfiqFtlwD3ab7JDpa1eo7PDQf1W5tqsZuzHcHCE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":117687},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"2d9658d3be49306eee964dd700c3bdd744b5ce7c","scripts":{"dev":"ts-node src/cli.ts start","build":"tsc","clean":"rimraf dist","start":"node dist/cli.js start","prepublishOnly":"npm run build"},"_npmUser":{"name":"louwill","email":"ygnjd2016@gmail.com"},"repository":{"url":"git+https://github.com/luwill/Claude-Code-Model-Router.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight API gateway for routing Claude Code requests to multiple AI models","directories":{},"_nodeVersion":"24.14.0","dependencies":{"chalk":"^5.3.0","dotenv":"^16.4.5","express":"^4.21.0","js-yaml":"^4.1.0","commander":"^12.1.0","node-fetch":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.7","ts-node":"^10.9.2","typescript":"^5.4.5","@types/node":"^20.14.0","@types/express":"^4.17.21","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-model-router_1.3.1_1777432277428_0.2904235367243546","host":"s3://npm-registry-packages-npm-production"}},"1.3.2":{"name":"claude-code-model-router","version":"1.3.2","keywords":["claude","claude-code","ai","llm","gateway","router","deepseek","qwen","kimi"],"author":{"name":"luwill"},"license":"MIT","_id":"claude-code-model-router@1.3.2","maintainers":[{"name":"louwill","email":"ygnjd2016@gmail.com"}],"homepage":"https://github.com/luwill/Claude-Code-Model-Router#readme","bugs":{"url":"https://github.com/luwill/Claude-Code-Model-Router/issues"},"bin":{"ccmr":"dist/cli.js","claude-code-model-router":"dist/cli.js"},"dist":{"shasum":"b9b4f77ef90d4edaaba171d32ff56878726297f8","tarball":"https://registry.npmjs.org/claude-code-model-router/-/claude-code-model-router-1.3.2.tgz","fileCount":26,"integrity":"sha512-DmVcvEwgnNwa7Rqi+tFZf6Ot2oP2UMGzYdO7xKVIGy8NwNAENZM5fvJxCcNiILpLpCXWeHe6xXCofEqin/K4QQ==","signatures":[{"sig":"MEUCIQCm/t/o4a1NNajftJ6A0BD7GZQZZ/7SQBqzqNIXOgoTnQIgYCx2h+d+EFEaBAhMSyR7xpfnqbB9lDVMFtZg/3N6Gkg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":120776},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"68e7ac18c8653afa9d32d4dd34237fae8762661b","scripts":{"dev":"ts-node src/cli.ts start","build":"tsc","clean":"rimraf dist","start":"node dist/cli.js start","prepublishOnly":"npm run build"},"_npmUser":{"name":"louwill","email":"ygnjd2016@gmail.com"},"repository":{"url":"git+https://github.com/luwill/Claude-Code-Model-Router.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight API gateway for routing Claude Code requests to multiple AI models","directories":{},"_nodeVersion":"24.14.0","dependencies":{"chalk":"^5.3.0","dotenv":"^16.4.5","express":"^4.21.0","js-yaml":"^4.1.0","commander":"^12.1.0","node-fetch":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.7","ts-node":"^10.9.2","typescript":"^5.4.5","@types/node":"^20.14.0","@types/express":"^4.17.21","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-model-router_1.3.2_1778060195493_0.06915456598607861","host":"s3://npm-registry-packages-npm-production"}},"1.3.3":{"name":"claude-code-model-router","version":"1.3.3","keywords":["claude","claude-code","ai","llm","gateway","router","deepseek","qwen","kimi"],"author":{"name":"luwill"},"license":"MIT","_id":"claude-code-model-router@1.3.3","maintainers":[{"name":"louwill","email":"ygnjd2016@gmail.com"}],"homepage":"https://github.com/luwill/Claude-Code-Model-Router#readme","bugs":{"url":"https://github.com/luwill/Claude-Code-Model-Router/issues"},"bin":{"ccmr":"dist/cli.js","claude-code-model-router":"dist/cli.js"},"dist":{"shasum":"de93b3ba99178b22a5ffe5b2b02a06bf63510d80","tarball":"https://registry.npmjs.org/claude-code-model-router/-/claude-code-model-router-1.3.3.tgz","fileCount":30,"integrity":"sha512-hmx+Rus9fYFxU2ftSZn0pr96OShFUshSJo5TjSZ+JzOSgrtHAs1SryaWv7MxqdqBwNYelFtrSDNkQTLaxvMsTg==","signatures":[{"sig":"MEUCIAej0qvKX5cL7zNu7PQrZqQLwcq+5tIGz+lmPf7QxJajAiEA7ePZfYU7rL46uR8+lIy9T3DAsUz/UwsT2/88+JJ6k/0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":122302},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"7ac5dee1cacf84d988ef3f002cd01c3a6bcff743","scripts":{"dev":"ts-node src/cli.ts start","build":"tsc","clean":"rimraf dist","start":"node dist/cli.js start","prepublishOnly":"npm run build"},"_npmUser":{"name":"louwill","email":"ygnjd2016@gmail.com"},"repository":{"url":"git+https://github.com/luwill/Claude-Code-Model-Router.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight API gateway for routing Claude Code requests to multiple AI models","directories":{},"_nodeVersion":"24.14.0","dependencies":{"chalk":"^5.3.0","dotenv":"^16.4.5","express":"^4.21.0","js-yaml":"^4.1.0","commander":"^12.1.0","node-fetch":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.7","ts-node":"^10.9.2","typescript":"^5.4.5","@types/node":"^20.14.0","@types/express":"^4.17.21","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-model-router_1.3.3_1778062709499_0.9679119720518756","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"claude-code-model-router","version":"1.4.0","keywords":["claude","claude-code","ai","llm","gateway","router","deepseek","qwen","kimi"],"author":{"name":"luwill"},"license":"MIT","_id":"claude-code-model-router@1.4.0","maintainers":[{"name":"louwill","email":"ygnjd2016@gmail.com"}],"homepage":"https://github.com/luwill/Claude-Code-Model-Router#readme","bugs":{"url":"https://github.com/luwill/Claude-Code-Model-Router/issues"},"bin":{"ccmr":"dist/cli.js","claude-code-model-router":"dist/cli.js"},"dist":{"shasum":"c0c4b0e31311293953c8edb111b8bcacc8725fca","tarball":"https://registry.npmjs.org/claude-code-model-router/-/claude-code-model-router-1.4.0.tgz","fileCount":30,"integrity":"sha512-UeWjTQxaKR9JhG8i3PMKWwG1M3RjPuwQNva1hViM7PPVIhn73W+SPE75MaESrWyr0PebyazrUZxt3le0joO5Fg==","signatures":[{"sig":"MEUCIFhjYO4B/Cl4Y/QipqVmqSCuDgia9GVhgE5WEiLDSXYVAiEAzoIulbLsUZCREbXOEto8ObJ/oLriKUid3Ib5/yAk2jg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":124455},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"bc9faedc06b2e49a67cb0dd0334fb16a8828d4d8","scripts":{"dev":"ts-node src/cli.ts start","build":"tsc","clean":"rimraf dist","start":"node dist/cli.js start","prepublishOnly":"npm run build"},"_npmUser":{"name":"louwill","email":"ygnjd2016@gmail.com"},"repository":{"url":"git+https://github.com/luwill/Claude-Code-Model-Router.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight API gateway for routing Claude Code requests to multiple AI models","directories":{},"_nodeVersion":"24.14.0","dependencies":{"chalk":"^5.3.0","dotenv":"^16.4.5","express":"^4.21.0","js-yaml":"^4.1.0","commander":"^12.1.0","node-fetch":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.7","ts-node":"^10.9.2","typescript":"^5.4.5","@types/node":"^20.14.0","@types/express":"^4.17.21","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-model-router_1.4.0_1778221639115_0.6865424213831077","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"claude-code-model-router","version":"1.5.0","keywords":["claude","claude-code","ai","llm","gateway","router","deepseek","qwen","kimi"],"author":{"name":"luwill"},"license":"MIT","_id":"claude-code-model-router@1.5.0","maintainers":[{"name":"louwill","email":"ygnjd2016@gmail.com"}],"homepage":"https://github.com/luwill/Claude-Code-Model-Router#readme","bugs":{"url":"https://github.com/luwill/Claude-Code-Model-Router/issues"},"bin":{"ccmr":"dist/cli.js","claude-code-model-router":"dist/cli.js"},"dist":{"shasum":"6fc22b5b835f4e2b8104b023d4c03b5df6d94a3d","tarball":"https://registry.npmjs.org/claude-code-model-router/-/claude-code-model-router-1.5.0.tgz","fileCount":30,"integrity":"sha512-AEKUv8yKuvi80BQE8ZokaOKGrdZtJm3fqixsrAeS8/qt538iToMtkeEvlcSYY8Z0syBKUt2emMlYepWb7nJnrA==","signatures":[{"sig":"MEQCIEss2ZHQ2C9fU6HPAm6NDJ8EoMkNkM4d00p8umx80BcKAiBw4n3b4s41yiBFze+O1h7dAnGEPeng4MRnOtnQVrvuIQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":128995},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"e0f1728a9208a66cd01046f423faf9e170b9d193","scripts":{"dev":"ts-node src/cli.ts start","build":"tsc","clean":"rimraf dist","start":"node dist/cli.js start","prepublishOnly":"npm run build"},"_npmUser":{"name":"louwill","email":"ygnjd2016@gmail.com"},"repository":{"url":"git+https://github.com/luwill/Claude-Code-Model-Router.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight API gateway for routing Claude Code requests to multiple AI models","directories":{},"_nodeVersion":"24.14.0","dependencies":{"chalk":"^5.3.0","dotenv":"^16.4.5","express":"^4.21.0","js-yaml":"^4.1.0","commander":"^12.1.0","node-fetch":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.7","ts-node":"^10.9.2","typescript":"^5.4.5","@types/node":"^20.14.0","@types/express":"^4.17.21","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-model-router_1.5.0_1780048112799_0.4674500446687586","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"claude-code-model-router","version":"1.6.0","keywords":["claude","claude-code","ai","llm","gateway","router","deepseek","qwen","kimi"],"author":{"name":"luwill"},"license":"MIT","_id":"claude-code-model-router@1.6.0","maintainers":[{"name":"louwill","email":"ygnjd2016@gmail.com"}],"homepage":"https://github.com/luwill/Claude-Code-Model-Router#readme","bugs":{"url":"https://github.com/luwill/Claude-Code-Model-Router/issues"},"bin":{"ccmr":"dist/cli.js","claude-code-model-router":"dist/cli.js"},"dist":{"shasum":"3fac09d5e04a12faab49dab2c1780ab50b37b070","tarball":"https://registry.npmjs.org/claude-code-model-router/-/claude-code-model-router-1.6.0.tgz","fileCount":30,"integrity":"sha512-BS+7lHj4AGXjZ52NZy1LkV12oE4dA4Xlu5NgeaFr1oF52knCUeDfI/q/5nbhtBHH5eNVGkiTbE4lrt91f4E7TA==","signatures":[{"sig":"MEYCIQCnuopLAlcro/5X0KEzWDm254T8sRqIBUhnCXSzHrC8rwIhAKyz8nppTXl09QiS7QvW9613pBcAxW4r5iVrH97iiEZM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":127097},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"f873dc01770c15cf502f41e54993f9ee409649b8","scripts":{"dev":"ts-node src/cli.ts start","build":"tsc","clean":"rimraf dist","start":"node dist/cli.js start","prepublishOnly":"npm run build"},"_npmUser":{"name":"louwill","email":"ygnjd2016@gmail.com"},"repository":{"url":"git+https://github.com/luwill/Claude-Code-Model-Router.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight API gateway for routing Claude Code requests to multiple AI models","directories":{},"_nodeVersion":"24.14.0","dependencies":{"chalk":"^5.3.0","dotenv":"^16.4.5","express":"^4.21.0","js-yaml":"^4.1.0","commander":"^12.1.0","node-fetch":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.7","ts-node":"^10.9.2","typescript":"^5.4.5","@types/node":"^20.14.0","@types/express":"^4.17.21","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-model-router_1.6.0_1780285099588_0.6925306026067892","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"claude-code-model-router","version":"1.7.0","keywords":["claude","claude-code","ai","llm","gateway","router","deepseek","qwen","kimi"],"author":{"name":"luwill"},"license":"MIT","_id":"claude-code-model-router@1.7.0","maintainers":[{"name":"louwill","email":"ygnjd2016@gmail.com"}],"homepage":"https://github.com/luwill/Claude-Code-Model-Router#readme","bugs":{"url":"https://github.com/luwill/Claude-Code-Model-Router/issues"},"bin":{"ccmr":"dist/cli.js","claude-code-model-router":"dist/cli.js"},"dist":{"shasum":"1de220c08aa3018d6de7376667dd8440c541e45f","tarball":"https://registry.npmjs.org/claude-code-model-router/-/claude-code-model-router-1.7.0.tgz","fileCount":30,"integrity":"sha512-nrEp8NfoVo2W07HL5TnC/pE88WDBNswiDCGISPcw2+HRGHQKnHlHsxQ0istSWvCaaQNiZ7ZFosMnmsnugtxruw==","signatures":[{"sig":"MEYCIQD0btZaLGuxDC/tjxY3PA2c8+rwbUAc1b+PzI19HTK4HwIhANCtgIz1qEhnLIWj8Lg8gNvp1uXtd7VCrMA3+VX4BBUe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":137263},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"79e9fe203a0110278b2f36633ef29bcc2fc54dd2","scripts":{"dev":"ts-node src/cli.ts start","build":"tsc","clean":"rimraf dist","start":"node dist/cli.js start","prepublishOnly":"npm run build"},"_npmUser":{"name":"louwill","email":"ygnjd2016@gmail.com"},"repository":{"url":"git+https://github.com/luwill/Claude-Code-Model-Router.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight API gateway for routing Claude Code requests to multiple AI models","directories":{},"_nodeVersion":"24.14.0","dependencies":{"chalk":"^5.3.0","dotenv":"^16.4.5","express":"^4.21.0","js-yaml":"^4.1.0","commander":"^12.1.0","node-fetch":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.7","ts-node":"^10.9.2","typescript":"^5.4.5","@types/node":"^20.14.0","@types/express":"^4.17.21","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-model-router_1.7.0_1782205453851_0.3698003565696244","host":"s3://npm-registry-packages-npm-production"}},"1.7.1":{"name":"claude-code-model-router","version":"1.7.1","keywords":["claude","claude-code","ai","llm","gateway","router","deepseek","qwen","kimi"],"author":{"name":"luwill"},"license":"MIT","_id":"claude-code-model-router@1.7.1","maintainers":[{"name":"louwill","email":"ygnjd2016@gmail.com"}],"homepage":"https://github.com/luwill/Claude-Code-Model-Router#readme","bugs":{"url":"https://github.com/luwill/Claude-Code-Model-Router/issues"},"bin":{"ccmr":"dist/cli.js","claude-code-model-router":"dist/cli.js"},"dist":{"shasum":"ba824da87de226b9e9d657d89ea118acec8e9c96","tarball":"https://registry.npmjs.org/claude-code-model-router/-/claude-code-model-router-1.7.1.tgz","fileCount":30,"integrity":"sha512-n78cy0Vh1ESnOhRX9NKRhftce+6rL07Qx9buWsfgyVyc5S6uSx+gc582JDnoOvsSOr84DmPrp8dNu5YloAFZOA==","signatures":[{"sig":"MEUCIQC8P2ciCrVMwPcCOwb71lEn+npGHBdtdRWTP/YfM9JS3QIgIHq5rSJ6RCAX49S3j8AEapP7U9ClRsyN2VlQJt5iR70=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":146287},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"99cd211414abba232ff46d4aa5e1ad3c97120652","scripts":{"dev":"ts-node src/cli.ts start","build":"tsc","clean":"rimraf dist","start":"node dist/cli.js start","prepublishOnly":"npm run build"},"_npmUser":{"name":"louwill","email":"ygnjd2016@gmail.com"},"repository":{"url":"git+https://github.com/luwill/Claude-Code-Model-Router.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight API gateway for routing Claude Code requests to multiple AI models","directories":{},"_nodeVersion":"24.14.0","dependencies":{"chalk":"^5.3.0","dotenv":"^16.4.5","express":"^4.21.0","js-yaml":"^4.1.0","commander":"^12.1.0","node-fetch":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.7","ts-node":"^10.9.2","typescript":"^5.4.5","@types/node":"^20.14.0","@types/express":"^4.17.21","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-model-router_1.7.1_1782210294157_0.4219458100405742","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"claude-code-model-router","version":"1.8.0","keywords":["claude","claude-code","ai","llm","gateway","router","deepseek","qwen","kimi"],"author":{"name":"luwill"},"license":"MIT","_id":"claude-code-model-router@1.8.0","maintainers":[{"name":"louwill","email":"ygnjd2016@gmail.com"}],"homepage":"https://github.com/luwill/Claude-Code-Model-Router#readme","bugs":{"url":"https://github.com/luwill/Claude-Code-Model-Router/issues"},"bin":{"ccmr":"dist/cli.js","claude-code-model-router":"dist/cli.js"},"dist":{"shasum":"ff9f6094129f3497aca9809e9e6b91f2a695ef31","tarball":"https://registry.npmjs.org/claude-code-model-router/-/claude-code-model-router-1.8.0.tgz","fileCount":54,"integrity":"sha512-lj6M77HF3Mc8OLf18aj2srfw3i6HKNiaiUVexmrM19LZTs42gO5bI7e9ljr8BaGx3RLMgkdtT1yD3gUG8bb7bA==","signatures":[{"sig":"MEQCIG2V5XqC9XwkGOpFd7M9XfeH3XeEiVLOC2s6BKLDNGCnAiBZW2LTWS5pcBdgoCK3hR465zVMGnhWcWXU82lCDTWKdg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":214127},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"626c9801ab73b0c2df0b0077c51d4e9f6bf183f3","scripts":{"dev":"ts-node src/cli.ts start","test":"vitest run","build":"tsc","clean":"rimraf dist","start":"node dist/cli.js start","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"louwill","email":"ygnjd2016@gmail.com"},"repository":{"url":"git+https://github.com/luwill/Claude-Code-Model-Router.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight API gateway for routing Claude Code requests to multiple AI models","directories":{},"_nodeVersion":"24.14.0","dependencies":{"dotenv":"^16.4.5","express":"^4.21.0","js-yaml":"^4.1.0","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.7","vitest":"^4.1.10","ts-node":"^10.9.2","typescript":"^5.4.5","@types/node":"^20.14.0","@types/express":"^4.17.21","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-model-router_1.8.0_1783401137970_0.9916137036342236","host":"s3://npm-registry-packages-npm-production"}},"1.8.1":{"name":"claude-code-model-router","version":"1.8.1","keywords":["claude","claude-code","ai","llm","gateway","router","deepseek","qwen","kimi"],"author":{"name":"luwill"},"license":"MIT","_id":"claude-code-model-router@1.8.1","maintainers":[{"name":"louwill","email":"ygnjd2016@gmail.com"}],"homepage":"https://github.com/luwill/Claude-Code-Model-Router#readme","bugs":{"url":"https://github.com/luwill/Claude-Code-Model-Router/issues"},"bin":{"ccmr":"dist/cli.js","claude-code-model-router":"dist/cli.js"},"dist":{"shasum":"9f01f47fbdeb28baece497fabb9555b2d6822c51","tarball":"https://registry.npmjs.org/claude-code-model-router/-/claude-code-model-router-1.8.1.tgz","fileCount":58,"integrity":"sha512-o0xvP1CvwKR6RIddwWm2dvpStGPTpBsrolfH5Uep7nBv6asmLo52Ogy6HUGd/1HyFUfNCoWxWAVbDXYGPQ7Gow==","signatures":[{"sig":"MEYCIQCogrYt/B4vjOeniMccqBFi5adF3rTakNDq+bV3CNtxAwIhAJKv88PExbFPHnA5xSpwSRxdxxkeZxOZ/kVT2ARS0+IV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":231020},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"b24872c053a430677f01beae40708298c85875a5","scripts":{"dev":"ts-node src/cli.ts start","test":"vitest run","build":"tsc","clean":"rimraf dist","smoke":"node scripts/smoke.mjs","start":"node dist/cli.js start","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"louwill","email":"ygnjd2016@gmail.com"},"repository":{"url":"git+https://github.com/luwill/Claude-Code-Model-Router.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight API gateway for routing Claude Code requests to multiple AI models","directories":{},"_nodeVersion":"24.14.0","dependencies":{"dotenv":"^16.4.5","express":"^4.21.0","js-yaml":"^4.1.0","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.7","vitest":"^4.1.10","ts-node":"^10.9.2","typescript":"^5.4.5","@types/node":"^20.14.0","@types/express":"^4.17.21","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-model-router_1.8.1_1783588138960_0.9937258390810126","host":"s3://npm-registry-packages-npm-production"}},"1.8.2":{"name":"claude-code-model-router","version":"1.8.2","keywords":["claude","claude-code","ai","llm","gateway","router","deepseek","qwen","kimi"],"author":{"name":"luwill"},"license":"MIT","_id":"claude-code-model-router@1.8.2","maintainers":[{"name":"louwill","email":"ygnjd2016@gmail.com"}],"homepage":"https://github.com/luwill/Claude-Code-Model-Router#readme","bugs":{"url":"https://github.com/luwill/Claude-Code-Model-Router/issues"},"bin":{"ccmr":"dist/cli.js","claude-code-model-router":"dist/cli.js"},"dist":{"shasum":"47b8249551463ba99df58df89b899d25ecebc642","tarball":"https://registry.npmjs.org/claude-code-model-router/-/claude-code-model-router-1.8.2.tgz","fileCount":62,"integrity":"sha512-eHoW/Oz9ohO65sk2IX9cCArBUasruQYzNlT0e2GmQz/aoiuWe877fRhtTgapDt2PSfobkFIfU6rKuxxfU52+pg==","signatures":[{"sig":"MEYCIQCv6LpW1+IBAKQ9t7yPe9w0oY2UK4PlEJVzkGx7LT9DVwIhAOkSwOicTjbW9Uk26axNcbfLS331NbIeEcBrKZBX9EDv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":253162},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"df7bc6fe0fd11cd41d3786b836b2e54dafdd9238","scripts":{"dev":"ts-node src/cli.ts start","test":"vitest run","build":"tsc","clean":"rimraf dist","smoke":"node scripts/smoke.mjs","start":"node dist/cli.js start","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"louwill","email":"ygnjd2016@gmail.com"},"repository":{"url":"git+https://github.com/luwill/Claude-Code-Model-Router.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight API gateway for routing Claude Code requests to multiple AI models","directories":{},"_nodeVersion":"24.14.0","dependencies":{"dotenv":"^16.4.5","express":"^4.21.0","js-yaml":"^4.1.0","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.7","vitest":"^4.1.10","ts-node":"^10.9.2","typescript":"^5.4.5","@types/node":"^20.14.0","@types/express":"^4.17.21","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-model-router_1.8.2_1783590083341_0.17018413992372228","host":"s3://npm-registry-packages-npm-production"}},"1.8.3":{"name":"claude-code-model-router","version":"1.8.3","keywords":["claude","claude-code","ai","llm","gateway","router","deepseek","qwen","kimi"],"author":{"name":"luwill"},"license":"MIT","_id":"claude-code-model-router@1.8.3","maintainers":[{"name":"louwill","email":"ygnjd2016@gmail.com"}],"homepage":"https://github.com/luwill/Claude-Code-Model-Router#readme","bugs":{"url":"https://github.com/luwill/Claude-Code-Model-Router/issues"},"bin":{"ccmr":"dist/cli.js","claude-code-model-router":"dist/cli.js"},"dist":{"shasum":"9d3ac14cac0a6b87b42dd471cf396802ffd0d9e3","tarball":"https://registry.npmjs.org/claude-code-model-router/-/claude-code-model-router-1.8.3.tgz","fileCount":71,"integrity":"sha512-dJC2NJoUxDHPTb+Q05Id/mg65oiaYZ9dX0H3UyIGac/VYQcQky3S9OrFNHFE0OzxcqWNeJacGvj55EJVCRY0uA==","signatures":[{"sig":"MEUCIQD7uTWP337nbKBODexqj3+7KJKlg3/U0EOlwN9F8Dn5uQIgfAckrUM1HxW9mWdwhupD2Qpqze/l8tMBw6qUtCgAn7I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":320440},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"8d7ce4993cd4e16c1437ab836779e2cf22ebae8e","scripts":{"dev":"npm run build && node --enable-source-maps dist/cli.js start","test":"vitest run","build":"tsc","check":"npm run typecheck && npm test && npm run build && npm run smoke && npm audit --audit-level=high","clean":"rimraf dist","smoke":"node scripts/smoke.mjs","start":"node dist/cli.js start","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run check"},"_npmUser":{"name":"louwill","email":"ygnjd2016@gmail.com"},"deprecated":"broken: rejects all Claude Code v2.1+ sessions, upgrade to 1.8.4","repository":{"url":"git+https://github.com/luwill/Claude-Code-Model-Router.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight API gateway for routing Claude Code requests to multiple AI models","directories":{},"_nodeVersion":"24.14.0","dependencies":{"dotenv":"^16.4.5","express":"^4.22.2","js-yaml":"^4.3.0","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.7","vitest":"^4.1.10","typescript":"^5.4.5","@types/node":"^20.14.0","@types/express":"^4.17.21","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-model-router_1.8.3_1784188552108_0.5621007434523648","host":"s3://npm-registry-packages-npm-production"}},"1.8.4":{"name":"claude-code-model-router","version":"1.8.4","keywords":["claude","claude-code","ai","llm","gateway","router","deepseek","qwen","kimi"],"author":{"name":"luwill"},"license":"MIT","_id":"claude-code-model-router@1.8.4","maintainers":[{"name":"louwill","email":"ygnjd2016@gmail.com"}],"homepage":"https://github.com/luwill/Claude-Code-Model-Router#readme","bugs":{"url":"https://github.com/luwill/Claude-Code-Model-Router/issues"},"bin":{"ccmr":"dist/cli.js","claude-code-model-router":"dist/cli.js"},"dist":{"shasum":"55f35b3323238c88adabf9d8315ed9305f4ffd7e","tarball":"https://registry.npmjs.org/claude-code-model-router/-/claude-code-model-router-1.8.4.tgz","fileCount":71,"integrity":"sha512-PyCoCmRCsygD/lZB8vFXMDg6ltwrcHxDmg8xmP+3pYrWn+S1QDMmbq+W8k9QHfktcZfGm217JB5cGJ/N5L0YSg==","signatures":[{"sig":"MEYCIQCD/DovggvGtuS2/Ih5NxA663f8bZFD3XbXQ8bb9b36TAIhAKeRZucNsmVhvoETe6eYKHJ/AaEc4vzDQQSev5QT1Nwf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":321651},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"a0cabd2c91e4a5d6689a3fad7f06cd3f3a153bb6","scripts":{"dev":"npm run build && node --enable-source-maps dist/cli.js start","test":"vitest run","build":"tsc","check":"npm run typecheck && npm test && npm run build && npm run smoke && npm audit --audit-level=high","clean":"rimraf dist","smoke":"node scripts/smoke.mjs","start":"node dist/cli.js start","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run check"},"_npmUser":{"name":"louwill","email":"ygnjd2016@gmail.com"},"repository":{"url":"git+https://github.com/luwill/Claude-Code-Model-Router.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight API gateway for routing Claude Code requests to multiple AI models","directories":{},"_nodeVersion":"24.14.0","dependencies":{"dotenv":"^16.4.5","express":"^4.22.2","js-yaml":"^4.3.0","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.7","vitest":"^4.1.10","typescript":"^5.4.5","@types/node":"^20.14.0","@types/express":"^4.17.21","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-model-router_1.8.4_1784191083274_0.6185695356409717","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"claude-code-model-router","version":"1.9.0","keywords":["claude","claude-code","ai","llm","gateway","router","deepseek","qwen","kimi"],"author":{"name":"luwill"},"license":"MIT","_id":"claude-code-model-router@1.9.0","maintainers":[{"name":"louwill","email":"ygnjd2016@gmail.com"}],"homepage":"https://github.com/luwill/Claude-Code-Model-Router#readme","bugs":{"url":"https://github.com/luwill/Claude-Code-Model-Router/issues"},"bin":{"ccmr":"dist/cli.js","claude-code-model-router":"dist/cli.js"},"dist":{"shasum":"e79b517519a343b5a53ecf81f80aebcea61f3aac","tarball":"https://registry.npmjs.org/claude-code-model-router/-/claude-code-model-router-1.9.0.tgz","fileCount":71,"integrity":"sha512-cq8WiTad7/UWg/YTOlxvMn7pW6+ERQKAvV3OZBgb4Rw/CUumrXoEbsplOyZG7Xo0ZmiWdJ1v+KuAAXSIpB8g4g==","signatures":[{"sig":"MEUCICiuOnnBaTeVepLLFEj3FYvUw+OcqbLYj/5ulWQAgOOlAiEAtXQjLUdA5F9Ln2P6rbiUfssQBFQDa7Rr0D6j2pqGAzA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":327139},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"6330372337236a7b0be417395e2f1c8bdab682c3","scripts":{"dev":"npm run build && node --enable-source-maps dist/cli.js start","test":"vitest run","build":"tsc","check":"npm run typecheck && npm test && npm run build && npm run smoke && npm audit --audit-level=high","clean":"rimraf dist","smoke":"node scripts/smoke.mjs","start":"node dist/cli.js start","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run check"},"_npmUser":{"name":"louwill","email":"ygnjd2016@gmail.com"},"repository":{"url":"git+https://github.com/luwill/Claude-Code-Model-Router.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight API gateway for routing Claude Code requests to multiple AI models","directories":{},"_nodeVersion":"24.14.0","dependencies":{"dotenv":"^16.4.5","express":"^4.22.2","js-yaml":"^4.3.0","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.7","vitest":"^4.1.10","typescript":"^5.4.5","@types/node":"^20.14.0","@types/express":"^4.17.21","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-model-router_1.9.0_1784217406517_0.7370722763074151","host":"s3://npm-registry-packages-npm-production"}},"1.10.0":{"name":"claude-code-model-router","version":"1.10.0","keywords":["claude","claude-code","ai","llm","gateway","router","deepseek","qwen","kimi"],"author":{"name":"luwill"},"license":"MIT","_id":"claude-code-model-router@1.10.0","maintainers":[{"name":"louwill","email":"ygnjd2016@gmail.com"}],"homepage":"https://github.com/luwill/Claude-Code-Model-Router#readme","bugs":{"url":"https://github.com/luwill/Claude-Code-Model-Router/issues"},"bin":{"ccmr":"dist/cli.js","claude-code-model-router":"dist/cli.js"},"dist":{"shasum":"2bdcd29f0a98e91cb4a4590fa2da5d33e0f1226e","tarball":"https://registry.npmjs.org/claude-code-model-router/-/claude-code-model-router-1.10.0.tgz","fileCount":71,"integrity":"sha512-2Qrdt3NtpwYNLEvxEC+EpePLRavH3mME9iBJMdAK3AJn9aVwPU4+RR4qB26oLp8yPQvdV0RXSg9o8dSGLNfChg==","signatures":[{"sig":"MEYCIQCQFahGHR2EPcSSHJQLG/h17NhphScwrBU2dN4pEdFAXgIhAMn/TQ3mZWRWV/1+15xrvmWIIQhCOg3wd8a14rSAGuRa","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":339192},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"588ee19ddb2c0c5ccdf490c13913c0086e944886","scripts":{"dev":"npm run build && node --enable-source-maps dist/cli.js start","test":"vitest run","build":"tsc","check":"npm run typecheck && npm test && npm run build && npm run smoke && npm audit --audit-level=high","clean":"rimraf dist","smoke":"node scripts/smoke.mjs","start":"node dist/cli.js start","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run check"},"_npmUser":{"name":"louwill","email":"ygnjd2016@gmail.com"},"repository":{"url":"git+https://github.com/luwill/Claude-Code-Model-Router.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight API gateway for routing Claude Code requests to multiple AI models","directories":{},"_nodeVersion":"24.14.0","dependencies":{"dotenv":"^16.4.5","express":"^4.22.2","js-yaml":"^4.3.0","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.7","vitest":"^4.1.10","typescript":"^5.4.5","@types/node":"^20.14.0","@types/express":"^4.17.21","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-model-router_1.10.0_1784281546135_0.639536601158978","host":"s3://npm-registry-packages-npm-production"}},"1.11.1":{"name":"claude-code-model-router","version":"1.11.1","keywords":["claude","claude-code","ai","llm","gateway","router","deepseek","qwen","kimi"],"author":{"name":"luwill"},"license":"MIT","_id":"claude-code-model-router@1.11.1","maintainers":[{"name":"louwill","email":"ygnjd2016@gmail.com"}],"homepage":"https://github.com/luwill/Claude-Code-Model-Router#readme","bugs":{"url":"https://github.com/luwill/Claude-Code-Model-Router/issues"},"bin":{"ccmr":"dist/cli.js","claude-code-model-router":"dist/cli.js"},"dist":{"shasum":"332f2dc18a0270549f9277e27e76d845b925c84b","tarball":"https://registry.npmjs.org/claude-code-model-router/-/claude-code-model-router-1.11.1.tgz","fileCount":71,"integrity":"sha512-dAQcF8c9oqRjyPIeIl9MosDi7Vi1YkOwoWtfNLcxONF4iPdbXze1MXeLBSydFeTwFzoXttwn/VZyjOFrs4eFIw==","signatures":[{"sig":"MEQCIHX6cA45B6ra2wHvQINmPsu47mz6aKEPDO6Nj8n2QkOrAiASN+h/71O7irzZwtQfDuh2OK58Am8qbPsVvP7aDV1tGw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":343707},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"72e3c96df2ad27100a166e6289efae7f8eab3a90","scripts":{"dev":"npm run build && node --enable-source-maps dist/cli.js start","test":"vitest run","build":"tsc","check":"npm run typecheck && npm test && npm run build && npm run smoke && npm audit --audit-level=high","clean":"rimraf dist","smoke":"node scripts/smoke.mjs","start":"node dist/cli.js start","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run check"},"_npmUser":{"name":"louwill","email":"ygnjd2016@gmail.com"},"repository":{"url":"git+https://github.com/luwill/Claude-Code-Model-Router.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight API gateway for routing Claude Code requests to multiple AI models","directories":{},"_nodeVersion":"24.14.0","dependencies":{"dotenv":"^16.4.5","express":"^4.22.2","js-yaml":"^4.3.0","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.7","vitest":"^4.1.10","typescript":"^5.4.5","@types/node":"^20.14.0","@types/express":"^4.17.21","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-model-router_1.11.1_1784537566513_0.27279878552495074","host":"s3://npm-registry-packages-npm-production"}},"1.11.2":{"name":"claude-code-model-router","version":"1.11.2","keywords":["claude","claude-code","ai","llm","gateway","router","deepseek","qwen","kimi"],"author":{"name":"luwill"},"license":"MIT","_id":"claude-code-model-router@1.11.2","maintainers":[{"name":"louwill","email":"ygnjd2016@gmail.com"}],"homepage":"https://github.com/luwill/Claude-Code-Model-Router#readme","bugs":{"url":"https://github.com/luwill/Claude-Code-Model-Router/issues"},"bin":{"ccmr":"dist/cli.js","claude-code-model-router":"dist/cli.js"},"dist":{"shasum":"7df211085df50ea8f08c50a40bcdf91c3b8d5a14","tarball":"https://registry.npmjs.org/claude-code-model-router/-/claude-code-model-router-1.11.2.tgz","fileCount":71,"integrity":"sha512-Ya0QsjlBVltfPDUas/Ipfk+EW2qTQ5CQXyubQRl080VocC/e6KuGEaSptjGpk/lIDi1Bvu4qsslc5k+CI0qPpQ==","signatures":[{"sig":"MEQCIH3riihIG1/y6RkLf7eab/VCzQmtweaE8XWSi8HWc64BAiBlWqMazgbJqUWPddU5Fw66MCmmlKmNPupcYdEvNPhfvw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":345021},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"e64b37323ae1e2fadd62eb7e63c729d5ac55945b","scripts":{"dev":"npm run build && node --enable-source-maps dist/cli.js start","test":"vitest run","build":"tsc","check":"npm run typecheck && npm test && npm run build && npm run smoke && npm audit --audit-level=high","clean":"rimraf dist","smoke":"node scripts/smoke.mjs","start":"node dist/cli.js start","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run check"},"_npmUser":{"name":"louwill","email":"ygnjd2016@gmail.com"},"repository":{"url":"git+https://github.com/luwill/Claude-Code-Model-Router.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight API gateway for routing Claude Code requests to multiple AI models","directories":{},"_nodeVersion":"24.14.0","dependencies":{"dotenv":"^16.4.5","express":"^4.22.2","js-yaml":"^4.3.0","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.7","vitest":"^4.1.10","typescript":"^5.4.5","@types/node":"^20.14.0","@types/express":"^4.17.21","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-model-router_1.11.2_1784621133506_0.07465161649489582","host":"s3://npm-registry-packages-npm-production"}},"1.11.3":{"name":"claude-code-model-router","version":"1.11.3","keywords":["claude","claude-code","ai","llm","gateway","router","deepseek","qwen","kimi"],"author":{"name":"luwill"},"license":"MIT","_id":"claude-code-model-router@1.11.3","maintainers":[{"name":"louwill","email":"ygnjd2016@gmail.com"}],"homepage":"https://github.com/luwill/Claude-Code-Model-Router#readme","bugs":{"url":"https://github.com/luwill/Claude-Code-Model-Router/issues"},"bin":{"ccmr":"dist/cli.js","claude-code-model-router":"dist/cli.js"},"dist":{"shasum":"f67d6ea71c81e85056dcae2a8e373710ad037e79","tarball":"https://registry.npmjs.org/claude-code-model-router/-/claude-code-model-router-1.11.3.tgz","fileCount":71,"integrity":"sha512-jwfycOKcN+CDHszNPbo/XIILE1CZvtdqt1i8KT6s31o/dKO3TZVsqiA2jB9jgLt50c75c/fGjD0isvLzkpG97g==","signatures":[{"sig":"MEQCIEk7SLII1mlZcx0SWylrYdsrbtovTOK8AP1yMNDyx/F9AiAWQ7PlM43z4dWQmrYyldcFSMtdq36qiVmmZlf/aQa5RA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":345750},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"f4b3c312a041e8859183908a57f4efd2a4241316","scripts":{"dev":"npm run build && node --enable-source-maps dist/cli.js start","test":"vitest run","build":"tsc","check":"npm run typecheck && npm test && npm run build && npm run smoke && npm audit --audit-level=high","clean":"rimraf dist","smoke":"node scripts/smoke.mjs","start":"node dist/cli.js start","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run check"},"_npmUser":{"name":"louwill","email":"ygnjd2016@gmail.com"},"repository":{"url":"git+https://github.com/luwill/Claude-Code-Model-Router.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight API gateway for routing Claude Code requests to multiple AI models","directories":{},"_nodeVersion":"24.14.0","dependencies":{"dotenv":"^16.4.5","express":"^4.22.2","js-yaml":"^4.3.0","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.7","vitest":"^4.1.10","typescript":"^5.4.5","@types/node":"^20.14.0","@types/express":"^4.17.21","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-model-router_1.11.3_1784706172175_0.4370780868699353","host":"s3://npm-registry-packages-npm-production"}},"1.13.0":{"name":"claude-code-model-router","version":"1.13.0","keywords":["claude","claude-code","ai","llm","gateway","router","deepseek","qwen","kimi"],"author":{"name":"luwill"},"license":"MIT","_id":"claude-code-model-router@1.13.0","maintainers":[{"name":"louwill","email":"ygnjd2016@gmail.com"}],"homepage":"https://github.com/luwill/Claude-Code-Model-Router#readme","bugs":{"url":"https://github.com/luwill/Claude-Code-Model-Router/issues"},"bin":{"ccmr":"dist/cli.js","claude-code-model-router":"dist/cli.js"},"dist":{"shasum":"50da34c7b066c610a073a5b87c06fe13e4477257","tarball":"https://registry.npmjs.org/claude-code-model-router/-/claude-code-model-router-1.13.0.tgz","fileCount":71,"integrity":"sha512-eiOc9U1vukf3EcR1UOcqDWB6gK40MC/f2yjcpdCM60aD/VrZxRza+Wc6cM/LPh6OuvVqKZblpe5JUVbIDupeBQ==","signatures":[{"sig":"MEYCIQDAy2sA1dB2bZmlYb54I/NvoKtg5Z5M9yP17FIwY5ijwwIhALRT11uU6fCIKIvD9AG7umofLHyiQtpKptI8S0owJLxs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":348017},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"71fb6f242c56a1c9d38402c29e579ee78aa1ee3a","scripts":{"dev":"npm run build && node --enable-source-maps dist/cli.js start","test":"vitest run","build":"tsc","check":"npm run typecheck && npm test && npm run build && npm run smoke && npm audit --audit-level=high","clean":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\"","smoke":"node scripts/smoke.mjs","start":"node dist/cli.js start","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run check"},"_npmUser":{"name":"louwill","email":"ygnjd2016@gmail.com"},"repository":{"url":"git+https://github.com/luwill/Claude-Code-Model-Router.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight API gateway for routing Claude Code requests to multiple AI models","directories":{},"_nodeVersion":"24.14.0","dependencies":{"dotenv":"^16.4.5","express":"^4.22.2","js-yaml":"^4.3.0","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.10","typescript":"^5.4.5","@types/node":"^20.14.0","@types/express":"^4.17.21","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-model-router_1.13.0_1785421390348_0.7053606337656251","host":"s3://npm-registry-packages-npm-production"}},"1.14.0":{"name":"claude-code-model-router","version":"1.14.0","keywords":["claude","claude-code","ai","llm","gateway","router","deepseek","qwen","kimi"],"author":{"name":"luwill"},"license":"MIT","_id":"claude-code-model-router@1.14.0","maintainers":[{"name":"louwill","email":"ygnjd2016@gmail.com"}],"homepage":"https://github.com/luwill/Claude-Code-Model-Router#readme","bugs":{"url":"https://github.com/luwill/Claude-Code-Model-Router/issues"},"bin":{"ccmr":"dist/cli.js","claude-code-model-router":"dist/cli.js"},"dist":{"shasum":"65bf63ee536405a9f71e0f66f133f3eb01b16530","tarball":"https://registry.npmjs.org/claude-code-model-router/-/claude-code-model-router-1.14.0.tgz","fileCount":71,"integrity":"sha512-82f99ggYunbuyrfdkBSART/mFyxKPwM28TYFQOsVUOsy9Qe+mKAqfBJGjuKKjqcTPU4kS2J88Hqsao5oiBkbxw==","signatures":[{"sig":"MEYCIQCc5t57bYj4KzvZ9nKN+soNRhiwrYR1V70g631eC1YJJwIhAKvUbfhmCum7r03AHmxh2yjh18GB5Oe4iX1t2o+yOwuR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":349215},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"1c8aa596b8d2ee3a63e790e94a7b97145ed170d4","scripts":{"dev":"npm run build && node --enable-source-maps dist/cli.js start","test":"vitest run","build":"tsc","check":"npm run typecheck && npm test && npm run build && npm run smoke && npm audit --audit-level=high","clean":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\"","smoke":"node scripts/smoke.mjs","start":"node dist/cli.js start","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run check"},"_npmUser":{"name":"louwill","email":"ygnjd2016@gmail.com"},"repository":{"url":"git+https://github.com/luwill/Claude-Code-Model-Router.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight API gateway for routing Claude Code requests to multiple AI models","directories":{},"_nodeVersion":"24.14.0","dependencies":{"dotenv":"^16.4.5","express":"^4.22.2","js-yaml":"^4.3.0","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.10","typescript":"^5.4.5","@types/node":"^20.14.0","@types/express":"^4.17.21","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-model-router_1.14.0_1785767359796_0.13094915577162358","host":"s3://npm-registry-packages-npm-production"}},"1.15.0":{"name":"claude-code-model-router","version":"1.15.0","keywords":["claude","claude-code","ai","llm","gateway","router","deepseek","qwen","kimi"],"author":{"name":"luwill"},"license":"MIT","_id":"claude-code-model-router@1.15.0","maintainers":[{"name":"louwill","email":"ygnjd2016@gmail.com"}],"homepage":"https://github.com/luwill/Claude-Code-Model-Router#readme","bugs":{"url":"https://github.com/luwill/Claude-Code-Model-Router/issues"},"bin":{"ccmr":"dist/cli.js","claude-code-model-router":"dist/cli.js"},"dist":{"shasum":"1999bad32b1d994725a5e109b6441c5e9b947cf3","tarball":"https://registry.npmjs.org/claude-code-model-router/-/claude-code-model-router-1.15.0.tgz","fileCount":71,"integrity":"sha512-jYEfDWjHaT9BuF9cNI/QTDkeTjhvE5txbTsIOxEtMfVBzw1vqr6wFy/VSxPijxjYZzKKqlc+pvyeSHU1SQseZg==","signatures":[{"sig":"MEQCIEPsY04Lgymvvg03jSxyaIBw7PX7pBH79ocNP4CTXBD8AiAuN0rN7XwViGu3w4DQnDN1RKK2Wv9gExiywg+3k1LzKg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":353563},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"7bba049aaae45459f7188f27f42a5a9daf0d8e40","scripts":{"dev":"npm run build && node --enable-source-maps dist/cli.js start","test":"vitest run","build":"tsc","check":"npm run typecheck && npm test && npm run build && npm run smoke && npm audit --audit-level=high","clean":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\"","smoke":"node scripts/smoke.mjs","start":"node dist/cli.js start","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run check"},"_npmUser":{"name":"louwill","email":"ygnjd2016@gmail.com"},"repository":{"url":"git+https://github.com/luwill/Claude-Code-Model-Router.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight API gateway for routing Claude Code requests to multiple AI models","directories":{},"_nodeVersion":"24.14.0","dependencies":{"dotenv":"^16.4.5","express":"^4.22.2","js-yaml":"^4.3.0","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.10","typescript":"^5.4.5","@types/node":"^20.14.0","@types/express":"^4.17.21","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-model-router_1.15.0_1787413315985_0.2650658681320326","host":"s3://npm-registry-packages-npm-production"}},"1.16.0":{"name":"claude-code-model-router","version":"1.16.0","keywords":["claude","claude-code","ai","llm","gateway","router","deepseek","qwen","kimi"],"author":{"name":"luwill"},"license":"MIT","_id":"claude-code-model-router@1.16.0","maintainers":[{"name":"louwill","email":"ygnjd2016@gmail.com"}],"homepage":"https://github.com/luwill/Claude-Code-Model-Router#readme","bugs":{"url":"https://github.com/luwill/Claude-Code-Model-Router/issues"},"bin":{"ccmr":"dist/cli.js","claude-code-model-router":"dist/cli.js"},"dist":{"shasum":"326b84e66eeab83307c45d14029740f62ba0f7a3","tarball":"https://registry.npmjs.org/claude-code-model-router/-/claude-code-model-router-1.16.0.tgz","fileCount":71,"integrity":"sha512-C0tQcqp7FoBT8jaQb437/bMTo+nqibkMnQ6JrwTadDs/fyatiiilkyCbx3EU5efmht7CeQKQSEV/IL6O7cEu7g==","signatures":[{"sig":"MEUCIQD5rZHORHaBUkPtjwqai1iJoGaWb+EGqds6zh2W/OSoqwIgXjQUeATS7MH6CjCdGYpaCEPFt5it/mp2KJJxhadmRMs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":362698},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"8a87b43056e7699952a42aa447b878616c3cc741","scripts":{"dev":"npm run build && node --enable-source-maps dist/cli.js start","test":"vitest run","build":"tsc","check":"npm run typecheck && npm test && npm run build && npm run smoke && npm audit --audit-level=high","clean":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\"","smoke":"node scripts/smoke.mjs","start":"node dist/cli.js start","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run check"},"_npmUser":{"name":"louwill","email":"ygnjd2016@gmail.com"},"repository":{"url":"git+https://github.com/luwill/Claude-Code-Model-Router.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight API gateway for routing Claude Code requests to multiple AI models","directories":{},"_nodeVersion":"24.14.0","dependencies":{"dotenv":"^16.4.5","express":"^4.22.2","js-yaml":"^4.3.0","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.10","typescript":"^5.4.5","@types/node":"^20.14.0","@types/express":"^4.17.21","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-model-router_1.16.0_1787932709741_0.44484890653379416","host":"s3://npm-registry-packages-npm-production"}},"1.18.0":{"name":"claude-code-model-router","version":"1.18.0","keywords":["claude","claude-code","ai","llm","gateway","router","deepseek","qwen","kimi"],"author":{"name":"luwill"},"license":"MIT","_id":"claude-code-model-router@1.18.0","maintainers":[{"name":"louwill","email":"ygnjd2016@gmail.com"}],"homepage":"https://github.com/luwill/Claude-Code-Model-Router#readme","bugs":{"url":"https://github.com/luwill/Claude-Code-Model-Router/issues"},"bin":{"ccmr":"dist/cli.js","claude-code-model-router":"dist/cli.js"},"dist":{"shasum":"58b898e68e04af58bd416353a092af71ff179f7b","tarball":"https://registry.npmjs.org/claude-code-model-router/-/claude-code-model-router-1.18.0.tgz","fileCount":71,"integrity":"sha512-mFc6LrKzFYZ/fphJtLSX4kVNwf7o8GhM4wV7KkqIsHkuusSC//wAucaOO+mCdpLVomapvF3RK5nkgzWLwirEdA==","signatures":[{"sig":"MEYCIQDgL7TXjPgQXvf4kJAprbWWquVHiIbzAG34nUUpso1rNgIhANN+80UclqCCtzgMNWqntGOymjIYUumEp+lgtGgGIb6j","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":367781},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"cc0592e902330778d026fffc0a82a2e2ca311385","scripts":{"dev":"npm run build && node --enable-source-maps dist/cli.js start","test":"vitest run","build":"tsc","check":"npm run typecheck && npm test && npm run build && npm run smoke && npm audit --audit-level=high","clean":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\"","smoke":"node scripts/smoke.mjs","start":"node dist/cli.js start","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run check"},"_npmUser":{"name":"louwill","email":"ygnjd2016@gmail.com"},"repository":{"url":"git+https://github.com/luwill/Claude-Code-Model-Router.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight API gateway for routing Claude Code requests to multiple AI models","directories":{},"_nodeVersion":"24.14.0","dependencies":{"dotenv":"^16.4.5","express":"^4.22.2","js-yaml":"^4.3.0","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.10","typescript":"^5.4.5","@types/node":"^20.14.0","@types/express":"^4.17.21","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-model-router_1.18.0_1789020622679_0.5860629712776995","host":"s3://npm-registry-packages-npm-production"}},"1.20.0":{"name":"claude-code-model-router","version":"1.20.0","keywords":["claude","claude-code","ai","llm","gateway","router","deepseek","qwen","kimi"],"author":{"name":"luwill"},"license":"MIT","_id":"claude-code-model-router@1.20.0","maintainers":[{"name":"louwill","email":"ygnjd2016@gmail.com"}],"homepage":"https://github.com/luwill/Claude-Code-Model-Router#readme","bugs":{"url":"https://github.com/luwill/Claude-Code-Model-Router/issues"},"bin":{"ccmr":"dist/cli.js","claude-code-model-router":"dist/cli.js"},"dist":{"shasum":"ca9d3b3078043543804d1fd9c802d6946505d589","tarball":"https://registry.npmjs.org/claude-code-model-router/-/claude-code-model-router-1.20.0.tgz","fileCount":79,"integrity":"sha512-IL+XKymlgPYeW2yfP5vHNHASb4SuwVwo/maEhUjJr/d+F+duBrCPdmy+ExLObsuElTKmSGkKRs0FbL/d23smSw==","signatures":[{"sig":"MEUCIGbc+zQKM2AQFAHseqEpFRfhaarBQrf9zUdRGTkWW3N/AiEAwkR6AhJBQemhtgrxrOpA1/MGPp5ZLimH8id0tndBKAQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":391214},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"df529b895242de90555ffb07261b95cc8f023617","scripts":{"dev":"npm run build && node --enable-source-maps dist/cli.js start","test":"vitest run","build":"tsc","check":"npm run typecheck && npm test && npm run build && npm run smoke && npm audit --audit-level=high","clean":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\"","smoke":"node scripts/smoke.mjs","start":"node dist/cli.js start","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run check"},"_npmUser":{"name":"louwill","email":"ygnjd2016@gmail.com"},"repository":{"url":"git+https://github.com/luwill/Claude-Code-Model-Router.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight API gateway for routing Claude Code requests to multiple AI models","directories":{},"_nodeVersion":"24.14.0","dependencies":{"dotenv":"^16.4.5","express":"^4.22.2","js-yaml":"^4.3.0","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.10","typescript":"^5.4.5","@types/node":"^20.14.0","@types/express":"^4.17.21","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-model-router_1.20.0_1789023489715_0.5152206894598297","host":"s3://npm-registry-packages-npm-production"}},"1.21.0":{"_id":"claude-code-model-router@1.21.0","bin":{"ccmr":"dist/cli.js","claude-code-model-router":"dist/cli.js"},"bugs":{"url":"https://github.com/luwill/Claude-Code-Model-Router/issues"},"dist":{"shasum":"5803080dd21898e8cf05c40dd82e48aadb67ff3f","tarball":"https://registry.npmjs.org/claude-code-model-router/-/claude-code-model-router-1.21.0.tgz","fileCount":79,"integrity":"sha512-Hlc8okoq+q9UBeHjwezG3qvnQUhIjWp3cF+H53kXY+MO2PafAf1R0whY7idGe2A0yISssEi6OZfg61WHtuVTzw==","signatures":[{"sig":"MEUCID8auUQO76tfoLSDzx+Y142UZT8h1Wcily9c3ZfhuFTAAiEAqvtdFQ+TJCFSwc362WCR3HyL4Y0hJllsAodZYsrKL3s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDDmyxvOmVTGi1Myw2TYEWBPI63TdmgbMtV7KrtuOUwPQIgf5a4G5YJf8QujKxLg6x3oyo54b+7lCGq0DQ9qRmSnD0="}],"unpackedSize":393207},"main":"dist/index.js","name":"claude-code-model-router","types":"dist/index.d.ts","author":{"name":"luwill"},"engines":{"node":">=18.0.0"},"gitHead":"6ab5444e019815dca831a92e92970a9c64217886","license":"MIT","scripts":{"dev":"npm run build && node --enable-source-maps dist/cli.js start","test":"vitest run","build":"tsc","check":"npm run typecheck && npm test && npm run build && npm run smoke && npm audit --audit-level=high","clean":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\"","smoke":"node scripts/smoke.mjs","start":"node dist/cli.js start","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run check"},"version":"1.21.0","_npmUser":{"name":"louwill","email":"ygnjd2016@gmail.com"},"homepage":"https://github.com/luwill/Claude-Code-Model-Router#readme","keywords":["claude","claude-code","ai","llm","gateway","router","deepseek","qwen","kimi"],"repository":{"url":"git+https://github.com/luwill/Claude-Code-Model-Router.git","type":"git"},"_npmVersion":"11.9.0","description":"A lightweight API gateway for routing Claude Code requests to multiple AI models","directories":{},"maintainers":[{"name":"louwill","email":"ygnjd2016@gmail.com"}],"_nodeVersion":"24.14.0","dependencies":{"dotenv":"^16.4.5","express":"^4.22.2","js-yaml":"^4.3.0","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.10","typescript":"^5.4.5","@types/node":"^20.14.0","@types/express":"^4.17.21","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/claude-code-model-router_1.21.0_1789892751053_0.8057719688844527"}}},"time":{"created":"2025-12-05T01:45:49.180Z","modified":"2026-09-20T08:25:51.358Z","1.0.0":"2025-12-05T01:45:49.336Z","1.0.1":"2025-12-11T02:01:20.750Z","1.1.0":"2025-12-23T09:06:10.799Z","1.2.0":"2026-03-16T05:39:55.569Z","1.2.1":"2026-03-18T01:47:20.519Z","1.2.2":"2026-03-27T15:04:53.375Z","1.2.3":"2026-03-27T15:37:52.887Z","1.3.0":"2026-04-28T10:40:01.505Z","1.3.1":"2026-04-29T03:11:17.602Z","1.3.2":"2026-05-06T09:36:35.627Z","1.3.3":"2026-05-06T10:18:29.672Z","1.4.0":"2026-05-08T06:27:19.287Z","1.5.0":"2026-05-29T09:48:32.933Z","1.6.0":"2026-06-01T03:38:19.761Z","1.7.0":"2026-06-23T09:04:14.002Z","1.7.1":"2026-06-23T10:24:54.305Z","1.8.0":"2026-07-07T05:12:18.118Z","1.8.1":"2026-07-09T09:08:59.103Z","1.8.2":"2026-07-09T09:41:23.514Z","1.8.3":"2026-07-16T07:55:52.245Z","1.8.4":"2026-07-16T08:38:03.417Z","1.9.0":"2026-07-16T15:56:46.676Z","1.10.0":"2026-07-17T09:45:46.280Z","1.11.1":"2026-07-20T08:52:46.643Z","1.11.2":"2026-07-21T08:05:33.650Z","1.11.3":"2026-07-22T07:42:52.334Z","1.13.0":"2026-07-30T14:23:10.497Z","1.14.0":"2026-08-03T14:29:19.932Z","1.15.0":"2026-08-22T15:41:56.158Z","1.16.0":"2026-08-28T15:58:29.900Z","1.18.0":"2026-09-10T06:10:22.838Z","1.20.0":"2026-09-10T06:58:09.937Z","1.21.0":"2026-09-20T08:25:51.205Z"},"bugs":{"url":"https://github.com/luwill/Claude-Code-Model-Router/issues"},"author":{"name":"luwill"},"license":"MIT","homepage":"https://github.com/luwill/Claude-Code-Model-Router#readme","keywords":["claude","claude-code","ai","llm","gateway","router","deepseek","qwen","kimi"],"repository":{"url":"git+https://github.com/luwill/Claude-Code-Model-Router.git","type":"git"},"description":"A lightweight API gateway for routing Claude Code requests to multiple AI models","maintainers":[{"name":"louwill","email":"ygnjd2016@gmail.com"}],"readme":"[![npm version](https://img.shields.io/npm/v/claude-code-model-router.svg)](https://www.npmjs.com/package/claude-code-model-router)\n[![npm downloads](https://img.shields.io/npm/dm/claude-code-model-router.svg)](https://www.npmjs.com/package/claude-code-model-router)\n\n\n# Claude Code Model Router\n\n一个轻量级 API 网关，让你在使用 Claude Code 时可以切换到第三方 AI 模型。\n\n支持 Windows、macOS、Linux 跨平台使用。\n\n## 快速开始\n\n### 方式一：全局安装（推荐）\n\n```bash\nnpm install -g claude-code-model-router\n\n# 然后使用 ccmr 命令\nccmr init      # 初始化配置（git 仓库内自动把 .env 加入 .gitignore）\n               # 或 ccmr init --global 写入 ~/.ccmr 全目录共享\nccmr doctor    # （可选）连通性体检，确认各模型可用\n\n# 启动 Claude Code（网关未运行时自动拉起，无需单独开终端）\nccmr claude    # 第三方模型（网关模式）\nclaude         # 官方订阅（默认模式）\n\n# 日常切换默认模型\nccmr use kimi\n```\n\n### 方式二：使用 npx\n\n```bash\n# 1. 初始化配置文件（git 仓库内自动把 .env 加入 .gitignore）\nnpx claude-code-model-router init\n\n# 2. 编辑 .env 文件，填入 API Keys\n\n# 3. （可选）连通性体检，确认各模型可用\nnpx claude-code-model-router doctor\n\n# 4. 启动 Claude Code——网关未运行时会自动拉起，无需单独开终端\n# 第三方模型（网关模式）：\nnpx claude-code-model-router claude\n\n# 官方订阅（默认模式）：\nclaude\n```\n\n> 也可以手动 `ccmr start` 前台启动网关（日志直接可见）；`ccmr claude` 自动拉起的网关日志在 `~/.ccmr/gateway.log`。\n\n## 命令说明\n\n```bash\n# 初始化配置文件（git 仓库内会自动把 .env 加入 .gitignore）\nnpx claude-code-model-router init\nnpx claude-code-model-router init --global  # 写入 ~/.ccmr，全目录共享一份配置\n\n# 启动网关（前台运行；models.yaml / .env 修改后自动热重载，无需重启）\nnpx claude-code-model-router start\nnpx claude-code-model-router start --port 9000  # 指定端口\nnpx claude-code-model-router start --host 0.0.0.0  # 需设置入站鉴权令牌\n\n# 查看本机正在运行的网关（端口 / PID / 版本 / 配置来源 / Key 状态）\nnpx claude-code-model-router status\n\n# 停止网关（含 `ccmr claude` 后台自动拉起的那个）\nnpx claude-code-model-router stop\nnpx claude-code-model-router stop --port 9000\nnpx claude-code-model-router stop --all\n\n# 查看可用模型\nnpx claude-code-model-router models\n\n# 切换默认模型（持久化写回 models.yaml，运行中的网关自动生效）\nnpx claude-code-model-router use kimi\n\n# 连通性体检：对每个已配 Key 的模型发一条微型真实请求\n# 一次性暴露端点错误、Key 失效、账号未开通模型等问题\nnpx claude-code-model-router doctor            # 检查全部\nnpx claude-code-model-router doctor seed kimi  # 只检查指定模型\n\n# 查看网关的按模型用量统计（请求数 / 错误数 / tokens）\nnpx claude-code-model-router stats\n\n# 更新到 npm 上的最新版本（等同 npm install -g claude-code-model-router@latest）\nnpx claude-code-model-router update\nnpx claude-code-model-router update --check            # 只查有没有新版，不安装\nnpx claude-code-model-router update --package-manager pnpm  # npm / pnpm / yarn / bun\n\n# 启动 Claude Code（网关模式；网关未启动时会自动拉起）\nnpx claude-code-model-router claude\nnpx claude-code-model-router claude --gateway-port 9000  # 自定义网关端口\n\n# 启动 Claude Code（官方订阅）\nclaude\n```\n\n> **配置发现顺序**：`-c 指定路径` > `./models.yaml` > `./config/models.yaml` > `./.claude-router.yaml` > `~/.ccmr/models.yaml`。显式 `-c` 不存在或配置非法时会直接报错，不会回退到另一份配置。`.env` 按 `~/.ccmr/.env` < `./.env` < 配置文件相邻 `.env` 的优先级加载，父进程环境变量优先级最高（`CCMR_HOME` 可改写全局目录位置，日志也随之移动）。\n\n### 网关的生命周期\n\n| 启动方式 | 关掉终端窗口后 | 日志去向 |\n|----------|----------------|----------|\n| `ccmr start` | **随之退出**（前台进程） | 直接打印在终端 |\n| `ccmr claude` 自动拉起 | **继续在后台运行** | `~/.ccmr/gateway.log` |\n\n自动拉起的网关是 detached 进程（自成进程组、`PPID=1`），收不到终端的 `SIGHUP`——这是有意设计：多个 Claude Code 会话可以共用同一个网关，关掉其中一个窗口不该打断其他会话。代价是它不会自己消失，用 `ccmr status` 查看、`ccmr stop` 收掉。\n\n复用网关前会比较配置路径、路由内容、`.env` 来源及 API Key 的不可逆摘要。若端口上的网关来自另一个项目，`ccmr claude` 会拒绝复用并提示换端口或先停止旧网关，避免提示词发往错误的供应商账号。\n\n> `ccmr stop` 会同时校验 `/health` 身份和 `~/.ccmr/gateway-<port>.identity.json` 中的本机随机身份记录，匹配后才会发送信号。只伪造 HTTP 响应不能诱导它停止任意 PID。由 v1.8.2 及更早版本启动的旧网关没有身份记录，沿用其 `/health` 自报 PID 停止，升级后仍可正常回收。\n\n> **安全提示**：网关默认绑定到 `127.0.0.1`（仅本机可访问）。网关会用你本地配置的各厂商 API Key 代理上游请求，因此任何能访问该端口的人都能消耗你的额度。\n> 若确需通过 `--host 0.0.0.0` 暴露到局域网，必须设置环境变量 `CCMR_REQUIRED_AUTH_TOKEN`，此时调用方需在 `x-api-key` 或 `Authorization: Bearer <token>` 中携带该令牌。未设置时网关默认拒绝启动；仅在已隔离且明确接受风险时使用 `--allow-insecure-network`。远程未认证的 `/health` 只返回基础存活信息，不暴露 PID、路径或 Key 状态。\n\n### Claude Code 原生参数支持\n\n`ccmr claude` 命令完整支持 Claude Code 的原生启动参数：\n\n```bash\n# YOLO 模式（跳过所有权限确认）\nccmr claude --dangerously-skip-permissions\n\n# 继续上一次会话\nccmr claude --continue\nccmr claude -c\n\n# YOLO 模式 + 继续上一次会话\nccmr claude --dangerously-skip-permissions --continue\n\n# 恢复指定会话（交互式选择）\nccmr claude --resume\nccmr claude -r\n\n# 恢复指定会话 ID\nccmr claude --resume <session-id>\n\n# 调试模式\nccmr claude --debug\nccmr claude --verbose\n\n# 连接 IDE\nccmr claude --ide\n\n# 指定权限模式\nccmr claude --permission-mode bypassPermissions\n\n# 打印模式（非交互式）\nccmr claude -p \"你的问题\"\nccmr claude --print --output-format json \"你的问题\"\n```\n\n**支持的完整参数列表：**\n\n| 参数 | 说明 |\n|------|------|\n| `-c, --continue` | 继续最近的会话 |\n| `-r, --resume [id]` | 恢复指定会话或打开会话选择器 |\n| `--fork-session` | 恢复时创建新会话 ID |\n| `--dangerously-skip-permissions` | 跳过所有权限检查（YOLO 模式） |\n| `--permission-mode <mode>` | 权限模式：acceptEdits, bypassPermissions, default, dontAsk, plan |\n| `-p, --print` | 打印模式（非交互式） |\n| `--output-format <format>` | 输出格式：text, json, stream-json |\n| `--model <model>` | 指定模型（覆盖网关路由） |\n| `--system-prompt <prompt>` | 自定义系统提示 |\n| `--add-dir <dirs...>` | 添加额外目录权限 |\n| `-d, --debug` | 调试模式 |\n| `--verbose` | 详细输出 |\n| `--ide` | 自动连接 IDE |\n| `--gateway-port <port>` | 指定网关端口（默认 8080） |\n\n> **提示：** 任何 Claude Code 原生支持的参数都可以直接传递给 `ccmr claude`\n\n`ccmr claude` 会为网关模式自动注入独立环境变量：\n\n- `CLAUDE_CONFIG_DIR=~/.claude-gateway`\n- `ANTHROPIC_BASE_URL=http://127.0.0.1:<gateway-port>`\n- `ANTHROPIC_AUTH_TOKEN=ccmr-local-gateway`\n- `ANTHROPIC_MODEL` 和 Claude 默认模型变量会指向当前 `default_model`；若该模型的 `context_window` ≥ 1M，会自动带上 `[1m]` 后缀（如 `deepseek-flash[1m]`）。Claude Code 只有在模型名带这个后缀时才会真正开启 1M 上下文，并且会在请求发出前把后缀剥掉，因此不影响上游模型 ID\n- `CLAUDE_CODE_AUTO_COMPACT_WINDOW` 会按启动模型的 `context_window` 自动注入（如 Seed/Kimi 256K、DeepSeek 1M），避免 Claude Code 把第三方模型默认裁剪到 ~200k。若你已自行设置该变量，则尊重你的值不覆盖。注意它是会话级全局：运行时用 `/model` 切到**不同上下文窗口**的模型时，压缩阈值不会跟着变，需要重启或用 `ccmr claude --model <模型>` 重新启动以匹配（1M 模型之间互相切换不受影响）\n\n这些变量只作用于 `ccmr claude` 启动的 Claude Code 子进程，不会修改你的官方 Claude Code 配置，也不会影响直接运行 `claude` 的官方订阅模式。\n\n## 支持的模型\n\n| 短名称 | 版本别名 | 模型 | 提供商 |\n|--------|----------|------|--------|\n| `deepseek-v4-pro` | `deepseek`, `deepseek-v4`, `deepseek-pro`, `ds` | DeepSeek V4 Pro（官方计划下线，09-14 12:00 起路由到 V4.1 Flash） | DeepSeek |\n| `deepseek-flash` | `deepseek-chat`, `deepseek-4.1-flash`, `ds-4.1`, `deepseek-vision`, `ds-vision`, `deepseek-v4-flash` | DeepSeek V4.1 Flash（原生多模态） | DeepSeek |\n| `kimi-k3` | `k3` | Kimi K3 | Moonshot（国际站） |\n| `kimi-k2.6` | `kimi`, `kimi-k2`, `moonshot` | Kimi K2.6 | Moonshot（国际站） |\n| `kimi-k2.7-code` | `kimi-code`, `k2.7-code` | Kimi K2.7 Code | Moonshot（国际站） |\n| `kimi-k2.7-code-highspeed` | `kimi-highspeed`, `k2.7-highspeed` | Kimi K2.7 Code HighSpeed | Moonshot（国际站） |\n| `kimi-cn-k3` | `kimi-cn`, `moonshot-cn`, `k3-cn` | Kimi K3 | Moonshot（国内开放平台） |\n| `kimi-cn-k2.6` | - | Kimi K2.6 | Moonshot（国内开放平台） |\n| `kimi-cn-k2.7-code` | - | Kimi K2.7 Code | Moonshot（国内开放平台） |\n| `kimi-cn-k2.7-code-highspeed` | - | Kimi K2.7 Code HighSpeed | Moonshot（国内开放平台） |\n| `kimi-plan-k3-1m` | `kimi-plan` | Kimi K3 1M（Allegretto 及以上） | Kimi Code 会员订阅 |\n| `kimi-plan-k3` | - | Kimi K3 256K（Moderato 及以上） | Kimi Code 会员订阅 |\n| `kimi-plan-for-coding` | `kimi-for-coding` | Kimi K2.7 Code（全档位） | Kimi Code 会员订阅 |\n| `kimi-plan-for-coding-highspeed` | `kimi-plan-highspeed` | Kimi K2.7 Code HighSpeed（Allegretto 及以上） | Kimi Code 会员订阅 |\n| `minimax-m3` | `minimax`, `minimax-cn`, `mm` | MiniMax M3 | MiniMax CN |\n| `minimax-global-m3` | `minimax-global`, `minimax-io` | MiniMax M3 | MiniMax Global |\n| `qwen3.8-max` | `qwen`, `tongyi`, `qwen3.8` | Qwen3.8 Max | 阿里云（按量付费） |\n| `qwen3.7-max` | `qwen-max`, `qwen3.7` | Qwen3.7 Max | 阿里云（按量付费） |\n| `qwen3.8-flash` | `qwen-flash` | Qwen3.8 Flash（多模态，支持图片/视频输入） | 阿里云（按量付费） |\n| `qwen-plan-3.8-max` | `qwen-plan`, `qwen-plan-3.8`, `qwen-plan-max` | Qwen3.8 Max | 千问 Token Plan（订阅） |\n| `qwen-plan-3.7-max` | `qwen-plan-3.7` | Qwen3.7 Max | 千问 Token Plan（订阅） |\n| `qwen-plan-3.8-flash` | `qwen-plan-flash` | Qwen3.8 Flash（多模态，支持图片/视频输入） | 千问 Token Plan（订阅） |\n| `glm-plan-5.3` | `glm-plan`, `glm`, `glm-5.3`, `zhipu`, `chatglm` | GLM-5.3 | 智谱 GLM Coding Plan（订阅） |\n| `glm-plan-5.2` | `glm-5.2` | GLM-5.2 | 智谱 GLM Coding Plan（订阅） |\n| `glm-plan-5.3-flash` | `glm-flash`, `glm-5.3-flash`, `glm-plan-flash` | GLM-5.3-Flash（原生多模态） | 智谱 GLM Coding Plan（订阅） |\n| `glm-global-5.3` | `glm-global`, `zai`, `z-ai` | GLM-5.3 | Z.ai（国际） |\n| `glm-global-5.2` | - | GLM-5.2 | Z.ai（国际） |\n| `glm-global-5.3-flash` | `glm-global-flash`, `zai-flash` | GLM-5.3-Flash（原生多模态） | Z.ai（国际） |\n| `step-5-preview` | `step`, `step-5`, `step5`, `stepfun` | Step 5 Preview（1M 上下文，支持图片输入） | 阶跃星辰(按量付费) |\n| `step-plan-5-preview` | `step-plan`, `step-plan-5`, `stepplan` | Step 5 Preview (Step Plan) | 阶跃星辰(订阅) |\n| `mimo-v2.5-pro` | `mimo`, `mimo-pro`, `mimo-token-sgp`, `xiaomi` | MiMo V2.5 Pro | MiMo Token Plan SGP |\n| `mimo-v2.5` | `mimo-v2` | MiMo V2.5 | MiMo Token Plan SGP |\n| `mimo-token-cn-v2.5-pro` | `mimo-token-cn`, `mimo-cn` | MiMo V2.5 Pro | MiMo Token Plan CN |\n| `mimo-token-ams-v2.5-pro` | `mimo-token-ams`, `mimo-ams` | MiMo V2.5 Pro | MiMo Token Plan AMS |\n| `mimo-payg-v2.5-pro` | `mimo-payg`, `mimo-payg-pro` | MiMo V2.5 Pro | MiMo Pay-as-you-go |\n| `seed-2.1-pro` | `seed`, `seed-pro`, `doubao` | Doubao Seed 2.1 Pro | 火山方舟（按量付费） |\n| `seed-2.1-turbo` | `seed-turbo` | Doubao Seed 2.1 Turbo | 火山方舟（按量付费） |\n| `seed-plan-2.1-pro` | `seed-plan`, `seed-plan-pro`, `doubao-plan` | Doubao Seed 2.1 Pro | 火山方舟（Agent Plan 订阅） |\n| `seed-plan-2.1-turbo` | `seed-plan-turbo` | Doubao Seed 2.1 Turbo | 火山方舟（Agent Plan 订阅） |\n\n### 模型参数\n\n| 模型 | Context Window | Max Output Tokens |\n|------|----------------|-------------------|\n| DeepSeek V4 Pro | 1M | 384K |\n| DeepSeek V4.1 Flash | 1M | 384K |\n| Kimi K3 (国际站 / 国内) | 1M | 1M（默认 128K） |\n| Kimi K2.6 (国际站 / 国内) | 256K | 32K |\n| Kimi K2.7 Code / HighSpeed (国际站 / 国内) | 256K | 32K |\n| Kimi K3 (Coding Plan `kimi-plan-k3-1m` / `kimi-plan-k3`) | 1M / 256K（按档位） | 1M / 128K |\n| Kimi K2.7 Code / HighSpeed (Coding Plan) | 256K | 32K |\n| MiniMax M3 (CN / Global) | 1M | 128K |\n| Qwen3.8 Max (按量付费 / Token Plan) | 1M | 64K |\n| Qwen3.7 Max (按量付费 / Token Plan) | 1M | 64K |\n| Qwen3.8 Flash (按量付费 / Token Plan) | 1M | 128K |\n| GLM-5.3 / GLM-5.2 (Coding Plan / 国际) | 1M | 128K |\n| GLM-5.3-Flash (Coding Plan / 国际) | 1M | 128K |\n| Step 3.7 Flash (按量付费 / Step Plan) | 256K | 384K |\n| MiMo V2.5 Pro | 1M | 128K |\n| MiMo V2.5 | 1M | 128K |\n| Doubao Seed 2.1 Pro / Turbo (按量付费 / Agent Plan) | 256K | 256K |\n\n### 内置 Web Search 支持\n\nClaude Code 内置的 `Web Search` 是 **Anthropic 服务端工具**（`web_search_20250305`）：搜索不在本地执行，而是由 API 提供方的服务器在生成过程中代跑。走网关后\"服务器\"是各家的 Anthropic 兼容端点，**是否真的执行搜索取决于供应商是否实现了该服务端工具**——网关对两种情况的转发行为完全相同。实测（2026-07-17，各发一条带 `web_search` 工具的真实请求）：\n\n| 供应商 | 服务端 Web Search | 表现 |\n|--------|-------------------|------|\n| Moonshot 国内（kimi-cn-k3） | ✅ 支持 | 返回 `server_tool_use` + `web_search_tool_result`，搜到实时结果 |\n| DeepSeek | ✅ 支持 | 同上 |\n| MiniMax CN（minimax-m3） | ✅ 支持 | 同上 |\n| 智谱 GLM（glm-plan-5.2） | ❌ 不支持 | 工具被静默忽略，模型回答\"无法联网\"，Claude Code 显示 `Did 0 searches` |\n| Qwen 按量付费（qwen3.7-max） | ❌ 不支持 | 同上 |\n\n其余供应商（Kimi 国际站、GLM Global、Step、MiMo、Doubao Seed、MiniMax Global）未实测，以实际行为为准；供应商随时可能补齐支持。\n\n对不支持的模型，可给 Claude Code 配一个**客户端执行**的 MCP 搜索工具（在本机跑，与所选模型无关），例如：\n\n```bash\nclaude mcp add tavily -- npx -y tavily-mcp   # 也可用 Exa、Brave Search 等\n```\n\n内置的 `WebFetch`（抓取指定 URL）由客户端执行，各家模型均可正常使用，缺的只是\"搜索\"这一步。\n\n## 配置\n\n### 环境变量 (.env)\n\n```bash\nDEEPSEEK_API_KEY=sk-xxx    # https://platform.deepseek.com/\nKIMI_API_KEY=sk-xxx        # Kimi 国际站: https://platform.kimi.ai/\nKIMI_CN_API_KEY=sk-xxx     # Kimi 国内开放平台（与国际站不互通）: https://platform.kimi.com/\nKIMI_CODE_API_KEY=sk-xxx   # Kimi Code 会员 coding 订阅（与开放平台不互通）: https://www.kimi.com/code/console\nMINIMAX_API_KEY=xxx        # MiniMax CN / Token Plan: https://platform.minimaxi.com/\nMINIMAX_GLOBAL_API_KEY=xxx # MiniMax Global: https://platform.minimax.io/\nQWEN_API_KEY=sk-xxx        # Qwen 按量付费: https://dashscope.console.aliyun.com/\nQWEN_PLAN_API_KEY=sk-sp-xxx # Qwen Token Plan 订阅（专属接入点 token-plan.cn-beijing.maas.aliyuncs.com）: https://platform.qianwenai.com/\nGLM_PLAN_API_KEY=xxx       # GLM Coding Plan 订阅（智谱国内）: https://bigmodel.cn/claude-code\nGLM_GLOBAL_API_KEY=xxx     # GLM 国际版（Z.ai）: https://z.ai/model-api\nARK_API_KEY=xxx            # Doubao Seed 火山方舟 按量付费 (/api/compatible): https://console.volcengine.com/ark\nARK_PLAN_API_KEY=xxx       # Doubao Seed 火山方舟 Agent Plan 订阅 (/api/plan) 专属 Key\nSTEP_API_KEY=xxx           # 阶跃星辰按量付费: https://platform.stepfun.com/\nSTEP_PLAN_API_KEY=xxx      # 阶跃星辰 Step Plan 订阅: https://platform.stepfun.com/\nMIMO_API_KEY=tp-xxx        # MiMo Token Plan，默认 SGP 集群\nMIMO_TOKEN_CN_API_KEY=tp-xxx  # MiMo Token Plan CN 集群\nMIMO_TOKEN_AMS_API_KEY=tp-xxx # MiMo Token Plan AMS 集群\nMIMO_PAYG_API_KEY=sk-xxx   # MiMo Pay-as-you-go: https://platform.xiaomimimo.com/\n\n# 可选网关设置\nGATEWAY_PORT=8080\nREQUEST_TIMEOUT=300\nLOG_LEVEL=INFO             # DEBUG / INFO / WARN / ERROR / SILENT\nCCMR_REQUIRED_AUTH_TOKEN=  # 非回环监听时必须设置\n```\n\n`ccmr claude` 与 `ccmr stats` 会自动使用 `CCMR_REQUIRED_AUTH_TOKEN`。如客户端与服务端使用不同环境，可在客户端单独设置 `CCMR_AUTH_TOKEN` 覆盖发送令牌。\n\nMiMo Token Plan 的 Base URL 与购买套餐所在集群绑定。默认 `mimo` 使用 SGP 集群；如果订阅页显示 CN 或 AMS 集群，请分别配置 `MIMO_TOKEN_CN_API_KEY` / `MIMO_TOKEN_AMS_API_KEY`，并使用 `mimo-token-cn` 或 `mimo-token-ams`。`tp-*` Token Plan Key 不能用于按量付费接口，`sk-*` 按量付费 Key 也不能用于 Token Plan 接口。\n\n智谱 GLM 国内**仅支持 Coding Plan 订阅**：`open.bigmodel.cn/api/anthropic` 是智谱国内唯一的 Anthropic 兼容端点，且被 Coding Plan 门控——按量付费 key / tokens 资源包调用会返回 `429 [1309] 套餐已到期/未订阅`，官方 FAQ 明确资源包在该通道不可用、套餐额度耗尽也不会转按量计费。国内按量付费只提供 OpenAI 协议（`/api/paas/v4`），ccmr 作为 Anthropic 协议直通网关暂无法接入，待智谱开通按量 Anthropic 端点后再支持。\n\n### 配置文件 (models.yaml)\n\n可以自定义供应商、模型变体、别名等。运行 `init` 命令会生成 `providers -> variants` 结构的模板；旧版平铺 `models` 配置仍然兼容。\n\n网关运行中修改 `models.yaml` 或 `.env` 会**自动热重载**（轮询检测，约 1 秒生效），新增、轮换或删除 Key 都会生效；入站鉴权令牌也可热轮换。即使文件启动时不存在，之后创建也会被捕获。注意：`gateway.host` / `gateway.port` 变更仍需重启才能重新绑定。\n\n排查某个网关到底在用哪份配置：\n\n```bash\ncurl -s :8080/health | jq '{version, config_file, ccmr_home, default_model}'\n```\n\n### 配置作用域：项目级 vs 全局\n\n配置发现按当前目录优先：`./models.yaml` > `./config/models.yaml` > `./.claude-router.yaml` > `~/.ccmr/models.yaml`；`.env` 同理，`./.env` 逐变量覆盖 `~/.ccmr/.env`。`ccmr claude` 自动拉起网关时会**继承当前工作目录**，因此网关看到的配置和你在这个目录里看到的一致。\n\n由此产生两种使用形态：\n\n- **项目级**：Key 只放在某个项目目录的 `.env` 里（不配 `~/.ccmr/.env`）。在该目录里直接 `ccmr claude` 即可，无需手动 `ccmr start`——但网关是\"项目级\"的，**换到其他目录就不可用**：新目录里自动拉起的网关找不到任何 Key 会被启动检查拦下；而复用原网关会因配置来源指纹不一致（跨项目保护，防止 A 项目会话误用 B 项目的 Key 和路由）被 `ccmr claude` 拒绝。\n- **全局**：`ccmr init --global` 生成 `~/.ccmr/models.yaml` + `~/.ccmr/.env` 并填入 Key（或直接把项目 `.env` 拷贝为 `~/.ccmr/.env`），之后在任意目录都能 `ccmr claude` 随开随用。\n\n两者可以共存，但合并规则不同：`.env` 按**变量**逐个覆盖（项目值优先，shell 环境变量最优先）；`models.yaml` 则**整体取第一个命中的文件**——项目里存在 `models.yaml` 时全局那份完全不参与（两者都只与内置默认配置合并）。常见组合是\"Key 放全局 `~/.ccmr/.env`、需要独立路由的项目放一份自己的 `models.yaml`\"。\n\n#### 故障降级（fallback）\n\n任意 variant 可声明降级链，上游返回 5xx/429 或连接失败（含超时）时按序切换到备选模型；4xx 客户端错误不会触发降级，流式响应一旦开始输出也不再切换：\n\n```yaml\nproviders:\n  deepseek:\n    # ...\n    variants:\n      v4-pro:\n        model_id: deepseek-v4-pro\n        fallback: [kimi-k2.6, glm-5.2]  # 依次降级\n```\n\n## 使用场景\n\n### 双模式使用（配置完全隔离）\n\n本工具通过独立的配置目录实现完全隔离，让你可以同时使用官方订阅和第三方模型：\n\n```\n┌─────────────────────────────────────────────────────────────────┐\n│  模式1: 官方订阅（默认）                                          │\n│  命令: claude                                                    │\n│  配置: ~/.claude/settings.json                                  │\n│  用途: 使用 Claude 官方模型（订阅额度）                           │\n└─────────────────────────────────────────────────────────────────┘\n\n┌─────────────────────────────────────────────────────────────────┐\n│  模式2: 第三方模型（网关）                                        │\n│  命令: npx claude-code-model-router claude                      │\n│  配置: ~/.claude-gateway/settings.json                          │\n│  用途: 使用第三方 AI 模型（DeepSeek, GLM, Qwen 等）              │\n└─────────────────────────────────────────────────────────────────┘\n```\n\n#### 为什么配置是隔离的？\n\n- **官方模式**使用 `~/.claude/` 配置目录（Claude Code 默认）\n- **网关模式**使用 `~/.claude-gateway/` 配置目录（独立隔离）\n- 两个配置目录完全独立，互不干扰\n- 在网关模式切换模型不会影响官方模式\n\n#### 使用步骤\n\n**第一步：启动网关**\n```bash\nnpx claude-code-model-router start\n```\n\n**第二步：选择使用模式**\n\n**使用官方订阅（终端 A）：**\n```bash\nclaude\n```\n- 使用官方 Claude 模型（Sonnet, Opus, Haiku）\n- 消耗订阅额度\n- 配置存储在 `~/.claude/`\n\n**使用第三方模型（终端 B）：**\n```bash\nnpx claude-code-model-router claude\n```\n- 使用第三方 AI 模型（DeepSeek V4, GLM-5.3, Qwen3.8, Kimi K3, Doubao Seed 2.1, MiMo V2.5 等）\n- 按 API 使用量付费\n- 配置存储在 `~/.claude-gateway/`\n\n#### 跨平台支持\n\n所有命令在 Windows、macOS、Linux 上完全相同，无需修改。\n\n### 在 Claude Code 中切换模型\n\n#### 官方模式（直接 `claude` 启动）\n\n```\n/model sonnet     # Claude Sonnet 4.5\n/model opus       # Claude Opus 4.5\n/model haiku      # Claude Haiku 3.5\n```\n\n#### 网关模式（`npx ... claude` 启动）\n\n使用短名称或版本别名切换模型：\n\n```bash\n# 使用短名称（向后兼容）\n/model deepseek   # 切换到 DeepSeek V4 Pro\n/model qwen       # 切换到 Qwen3.8 Max（按量付费）\n/model qwen-plan  # 切换到 Qwen3.8 Max（千问 Token Plan 订阅）\n/model glm        # 切换到 GLM-5.3（智谱 Coding Plan 订阅）\n/model glm-global # 切换到 GLM-5.3（国际 Z.ai）\n/model deepseek-flash # 切换到 DeepSeek V4.1 Flash（原生多模态，支持图片输入）\n/model qwen-flash # 切换到 Qwen3.8 Flash（按量付费，多模态）\n/model glm-flash  # 切换到 GLM-5.3-Flash（智谱 Coding Plan 订阅，原生多模态）\n/model seed       # 切换到 Doubao Seed 2.1 Pro（火山方舟 按量付费）\n/model seed-plan  # 切换到 Doubao Seed 2.1 Pro（火山方舟 Agent Plan 订阅）\n/model step       # 切换到 Step 5 Preview（按量付费）\n/model step-plan  # 切换到 Step 5 Preview（Step Plan 订阅）\n/model kimi       # 切换到 Kimi K2.6\n/model kimi-code  # 切换到 Kimi K2.7 Code（编程专用）\n/model kimi-highspeed # 切换到 Kimi K2.7 Code HighSpeed（约 6 倍速）\n/model minimax    # 切换到 MiniMax M3（国内 Token Plan）\n/model minimax-global # 切换到 MiniMax M3（海外）\n/model mimo       # 切换到 MiMo V2.5 Pro（Token Plan SGP）\n/model mimo-token-cn  # 切换到 MiMo V2.5 Pro（Token Plan CN）\n/model mimo-payg      # 切换到 MiMo V2.5 Pro（按量付费）\n\n# 使用版本别名（明确指定版本）\n/model deepseek-v4-pro           # DeepSeek V4 Pro（09-14 起上游路由到 V4.1 Flash）\n/model deepseek-flash            # DeepSeek V4.1 Flash（别名 deepseek-chat / ds-4.1 / deepseek-vision）\n/model glm-plan-5.3              # GLM-5.3（智谱 Coding Plan 订阅）\n/model glm-plan-5.2              # GLM-5.2（智谱 Coding Plan 订阅）\n/model glm-plan-5.3-flash        # GLM-5.3-Flash（智谱 Coding Plan 订阅；别名 glm-flash）\n/model glm-global-5.3            # GLM-5.3（国际 Z.ai）\n/model glm-global-5.2            # GLM-5.2（国际 Z.ai）\n/model glm-global-5.3-flash      # GLM-5.3-Flash（国际 Z.ai；别名 glm-global-flash）\n/model step-5-preview            # Step 5 Preview（按量付费；别名 step、step-5）\n/model step-plan-5-preview       # Step 5 Preview（Step Plan 订阅；别名 step-plan）\n/model minimax-m3                # MiniMax M3\n/model minimax-global-m3         # MiniMax M3 Global\n/model kimi-k2.6                 # Kimi K2.6\n/model kimi-k2.7-code            # Kimi K2.7 Code\n/model kimi-k2.7-code-highspeed  # Kimi K2.7 Code HighSpeed\n/model qwen3.8-max               # Qwen3.8 Max（按量付费；别名 qwen / qwen3.8）\n/model qwen3.7-max               # Qwen3.7 Max（按量付费）\n/model qwen-plan-3.8-max         # Qwen3.8 Max（Token Plan 订阅）\n/model qwen-plan-3.7-max         # Qwen3.7 Max（Token Plan 订阅）\n/model qwen3.8-flash             # Qwen3.8 Flash（按量付费；别名 qwen-flash）\n/model qwen-plan-3.8-flash       # Qwen3.8 Flash（Token Plan 订阅；别名 qwen-plan-flash）\n/model seed-2.1-pro              # Doubao Seed 2.1 Pro（按量付费）\n/model seed-2.1-turbo            # Doubao Seed 2.1 Turbo（按量付费）\n/model seed-plan-2.1-pro         # Doubao Seed 2.1 Pro（Agent Plan 订阅）\n/model seed-plan-2.1-turbo       # Doubao Seed 2.1 Turbo（Agent Plan 订阅）\n/model mimo-v2.5-pro             # MiMo V2.5 Pro\n/model mimo-v2.5                 # MiMo V2.5\n/model mimo-token-ams-v2.5-pro   # MiMo V2.5 Pro Token Plan AMS\n```\n\n**重要：** 两个模式的配置完全独立，在网关模式切换模型不会影响官方模式！\n\n## API 端点\n\n| 端点 | 方法 | 说明 |\n|------|------|------|\n| `/v1/messages` | POST | Anthropic Messages API |\n| `/v1/messages/count_tokens` | POST | 转发到所选供应商的兼容 token counting 端点 |\n| `/v1/models` | GET | 列出可用模型 |\n| `/usage` | GET | 按模型的用量统计（请求数 / 错误数 / tokens，网关重启后清零） |\n| `/health` | GET | 健康检查；本机或已认证请求额外返回 PID、配置来源和模型状态 |\n\n## 开发\n\n```bash\n# 克隆项目\ngit clone https://github.com/luwill/Claude-Code-Model-Router.git\ncd Claude-Code-Model-Router\n\n# 安装依赖\nnpm install\n\n# 开发模式\nnpm run dev\n\n# 构建\nnpm run build\n\n# 类型检查、测试、冒烟测试与依赖审计\nnpm run check\n\n# 本地测试\nnpm link\nccmr start\n```\n\n## 故障排除\n\n### 第一步：先跑 doctor\n\n```bash\nnpx claude-code-model-router doctor\n```\n\n对每个已配 Key 的模型发一条微型真实请求，直接给出结论：连通（含延迟）/ 上游报错原文（Key 失效、模型未开通、端点错误）/ 未配 Key。绝大多数\"模型用不了\"的问题一条命令即可定位。\n\n### 端口被占用\n\n```bash\n# 使用其他端口\nnpx claude-code-model-router start --port 9000\n```\n\n### API Key 错误\n\n1. 运行 `npx claude-code-model-router doctor` 查看上游的具体报错\n2. 检查 .env 文件中的 Key 是否正确（修改后网关自动热重载，无需重启）\n3. 确认账户有余额\n4. 运行 `npx claude-code-model-router models` 查看 Key 配置状态\n\n### 换目录后 `ccmr claude` 被拒绝（无 Key / 配置来源不一致）\n\nKey 只配在某个项目目录的 `.env` 里时，网关是项目级的，换目录不可用——见[配置作用域：项目级 vs 全局](#配置作用域项目级-vs-全局)。想在任意目录使用，运行 `ccmr init --global` 并把 Key 填入 `~/.ccmr/.env`。\n\n### 模型不执行 Web Search（`Did 0 searches`）\n\n内置 Web Search 是 Anthropic 服务端工具，是否可用取决于供应商——见[内置 Web Search 支持](#内置-web-search-支持)的实测表和 MCP 替代方案。\n\n### 网关模式提示地区不支持\n\n请确认是用 `npx claude-code-model-router claude` 或 `ccmr claude` 启动第三方模型模式，而不是直接运行 `claude`。网关模式会自动设置本地 `ANTHROPIC_BASE_URL`、`ANTHROPIC_AUTH_TOKEN` 和默认模型，避免 Claude Code 走官方 Anthropic 登录/地区检查路径。\n\n### DeepSeek 报 `Invalid user_id`\n\nDeepSeek Anthropic 兼容接口会忽略 `metadata` 字段，但某些 Claude Code 会话会携带包含特殊字符的 `metadata.user_id`，导致 DeepSeek 在请求校验阶段返回 400。路由器会在转发 DeepSeek 请求前移除该元数据，不影响上下文、工具调用或模型输出。\n\n## 更新日志\n\n### v1.21.0\n\n- **新增 Step 5 Preview**：阶跃星辰 2026-09-18 发布的新旗舰，600B 总参数 / 27B 激活，1M 上下文，支持文本与图片输入\n  - 两个出口都加了：按量付费 `step-5-preview`（`https://api.stepfun.com`，`STEP_API_KEY`）和订阅版 `step-plan-5-preview`（`https://api.stepfun.com/step_plan`，`STEP_PLAN_API_KEY`），上游模型 ID 都是 `step-5-preview`\n  - **裸别名改指向新旗舰**：`step`、`stepfun` → `step-5-preview`，`step-plan`、`stepplan` → `step-plan-5-preview`\n  - **移除 Step 3.7 Flash 的两个模型键**（`step-3.7-flash`、`step-plan-3.7-flash`）及其别名，阶跃星辰这一侧只保留 Step 5 Preview。**不把旧名字反向别名到新模型**：按量付费下两者价差约 5 倍（$0.2/$1.15 对 $1.00/$2.70），静默改道等于替用户加钱；且 1.21.0 之前生成的配置里存在 `step -> step-3.7-flash`，加反向别名会形成别名环（参见 DeepSeek V4 Flash 下线那次）。老配置自带 provider 块，升级后照常可加载\n  - 上下文窗口实测：1,034,012 tokens 可接受，约 1,059,900 被拒，按 1M 登记，因此会自动带 `[1m]` 后缀；max_tokens 沿用 Step 3.7 Flash 的 393216，上游对该值来者不拒，无法探测\n  - 实测两个端点的 `/v1/messages` 都返回 200 并回显 `step-5-preview`\n\n### v1.20.0\n\n- **新增 `ccmr update`**：一条命令更新到 npm 上的最新版本，等同 `npm install -g claude-code-model-router@latest`\n  - 先向 npm registry 查已发布版本并与本机版本做**数值比较**（避免 `1.9.0` 被字符串比较误判为高于 `1.10.0`），已是最新则不做任何安装\n  - **本地版本领先 registry 时也判定为最新**，不会把未发布的本地构建降级回线上版本\n  - `--check` 只报告不安装；`--package-manager` 支持 `npm` / `pnpm` / `yarn` / `bun`，且限定在白名单内——该值会成为被拉起进程的 argv[0]，不接受任意字符串\n  - 安装直接透传 npm 自己的输出，权限错误等原文可见；失败时以 npm 的退出码退出，并提示改用用户可写的 prefix\n  - 更新成功后会扫描本机运行中的网关，**列出仍在跑旧版本的实例并提示重启**（包升级不同于配置热重载，旧进程会继续跑旧代码），但不会替你去停用户的进程\n\n### v1.19.0\n\n- **1M 模型自动带 `[1m]` 后缀**：Claude Code 在自定义 base_url 后面默认按 ~200k 处理第三方模型，只有模型名以 `[1m]` 结尾时才会开启百万上下文——此前需要每次手动 `/model deepseek-flash[1m]`。现在两个出口都会自动补后缀：\n  - `ccmr claude` 注入的 `ANTHROPIC_MODEL` / `ANTHROPIC_DEFAULT_SONNET_MODEL` / `..._OPUS_MODEL` / `..._HAIKU_MODEL`（解决\"刚进界面就是 200K\"）\n  - `GET /v1/models` 返回的模型 id（解决\"用 `/model` 切换后又变回 200K\"）\n- **判定规则**：`context_window ≥ 1000000` 才加后缀，当前 42 个模型中 27 个符合（DeepSeek、Kimi K3、Qwen3.8、GLM-5.x、MiniMax M3、MiMo 等）；256K 及以下的模型（Seed、Kimi K2.x、Step）保持裸名——给小窗口模型挂 `[1m]` 会让 Claude Code 超发上下文\n- **后缀只对客户端有意义**：网关在解析模型名时会先剥掉 `[1m]` 再查别名，上游收到的始终是裸模型 ID（Kimi 曾因 `k3[1m]` 报 401）。因此 `deepseek-flash` 和 `deepseek-flash[1m]` 都能正常路由，老配置、老脚本不受影响\n\n### v1.18.0\n\n- **DeepSeek V4.1 Flash 正式版接入**（官方 2026-09-10 发布公告 / [定价页](https://api-docs.deepseek.com/quick_start/pricing)）：正式模型名 `deepseek-flash`，取代 09-08 的内测 id（`deepseek-v4.1-flash-expires-on-0910`，已过期）。552B MoE、Causal-Encoder-Decoder 非对称结构（输入激活 8B / 输出激活 16B）、原生多模态视觉理解，1M 上下文、最大输出 384K。实测：文本 200（0.62s）；base64 image block 真实进入上下文（8×8 纯蓝图正确答 \"Blue\"，input_tokens 227）\n- **V4 Flash 与 V4 Flash Vision Exp 已被官方下线**：模型条目 `deepseek-v4-flash`、`deepseek-v4-flash-vision-exp`、`deepseek-v4.1-flash-exp` 一并移除，但这些名字**保留为别名指向 `deepseek-flash`**，既有配置和 `/model` 习惯不受影响（上游同样把这些 id 路由到 V4.1 Flash——实测三者返回的 `model` 字段均为 `deepseek-flash`）。`deepseek-vision` / `ds-vision` 也指向新模型，语义仍然成立（V4.1 Flash 原生多模态）\n- **价格下调**（09-10 12:00 生效，仍为峰谷定价、闲时为高峰一半）：`deepseek-flash` 每百万 tokens 输入 $0.15（闲时）/ $0.3（高峰），输出 $0.6 / $1.2，缓存命中输入 $0.003 / $0.006\n- **升级提示**：本次移除了三个模型条目，但**没有**把 `deepseek-v4-flash` / `deepseek-v4-flash-vision-exp` 反向别名到 `deepseek-flash`——1.18 之前生成的 `models.yaml` 里有 `deepseek-flash: deepseek-v4-flash`，两者相遇会形成别名环让配置整体失效（已加回归测试锁定）。老配置升级后仍可正常加载：这些名字会继续解析到你 yaml 里保留的旧条目，上游暂时路由到 V4.1 Flash。但上游的兼容路由是\"暂时\"的，建议重新生成 `models.yaml`（备份旧文件后 `ccmr init`）以切到新条目\n- **`deepseek-v4-pro` 进入下线流程，默认模型改为 `deepseek-flash`**：官方公告称北京时间 2026-09-14 12:00 之后，访问该 id 的请求将全部路由到 V4.1 Flash 并按其单价计费，直到 V4.1 Pro 上线。目前该 id 仍返回真实 V4 Pro（实测），故条目与 `deepseek` / `ds` 别名保留；但内置 `default_model` 已从 `deepseek-v4-pro` 切到 `deepseek-flash`，避免 09-14 之后出现\"显示 V4 Pro、实际跑 V4.1 Flash\"的错位。已有 `models.yaml` 的用户不受影响（用户配置里的 `default_model` 优先），需要时用 `ccmr use deepseek-flash` 切换\n\n### v1.17.0\n\n- **新增 DeepSeek V4.1 Flash（内测）**：模型 `deepseek-v4.1-flash-exp`（别名 `deepseek-4.1-flash` / `deepseek-v4.1-flash` / `ds-4.1`），上游 id `deepseek-v4.1-flash-expires-on-0910`。来源为 DeepSeek 官方小助手 2026-09-08 公告：新模型结构、**原生多模态**、计费同 V4 Flash、每账号限 20 并发，**id 于 2026-09-10 过期**（正式 id 发布后本条目会移除或替换）。官方暂无文档页，上下文/最大输出按公告\"计费同 V4 Flash\"继承 V4 Flash 的 1M / 384K（API 实测不校验 `max_tokens`，无法用报错探测上限）。实测：文本调用 200（0.34s）；Anthropic base64 image block 真实进入上下文（8×8 纯红图正确答\"Red\"，input_tokens 227），对照组 `deepseek-v4-flash` 同请求只收到占位文本。默认模型不变（`deepseek` 仍指向 V4 Pro）\n- **修正过时说明**：DeepSeek 文本模型收到图片已不再返回 400——现为端点**静默替换为\"unsupported image\"占位文本**（2026-09-08 实测），配置注释与文档已同步更新\n\n### v1.16.0\n\n- **新增 GLM-5.3-Flash**（[智谱文档](https://docs.bigmodel.cn/cn/guide/models/vlm/glm-5.3-flash) / [Z.ai 文档](https://docs.z.ai/guides/vlm/glm-5.3-flash)）：GLM-5 系列首个原生多模态模型（视频/图片/文本/文件输入），320B 总参、18B 激活，1M 上下文、最大输出 128K，定价为 GLM-5.3 的 1/10。国内 `glm-plan-5.3-flash`（别名 `glm-flash` / `glm-5.3-flash` / `glm-plan-flash`）与国际 `glm-global-5.3-flash`（别名 `glm-global-flash` / `zai-flash`）同步新增，端点与 Key 复用现有 provider；两份官方 Claude Code 配置均已直接使用 `glm-5.3-flash`。Coding Plan 额度为 GLM-5.3 的 3 倍。默认模型不变（`glm` / `glm-global` 仍指向 5.3）。与 GLM-5.3 一样强制开启思考\n- **新增 Qwen3.8 Flash**（[百炼模型信息](https://help.aliyun.com/zh/model-studio/qwen3-8-flash) / [百炼 Anthropic 兼容 API](https://help.aliyun.com/zh/model-studio/anthropic-api-messages)）：千问多模态 flash 档（图片/视频/文本输入），1M 上下文、最大输出 131,072；百炼北京按量价 ¥0.8 / ¥2.7 每百万 tokens（输入/输出）。按量 `qwen3.8-flash`（别名 `qwen-flash`）与 Token Plan `qwen-plan-3.8-flash`（别名 `qwen-plan-flash`）同步新增；默认模型不变（`qwen` / `qwen-plan` 仍指向 3.8 Max）。按量版实测 `ccmr doctor` 通过；Token Plan 版依据[千问 AI 平台 latest-model 文档](https://platform.qianwenai.com/docs/developer-guides/getting-started/latest-model)「Token Plan 支持 Qwen3.8-Flash」收录，但 [Token Plan 概述](https://platform.qianwenai.com/docs/token-plan/overview)的档位模型表尚未列出它（该表仍含已下线的 glm-5.1，应为过期），且本次未能实测（测试订阅对 3.8-max 同样返回 `403 AccessDenied.Unpurchased`）——若你的档位不含该模型，上游会返回同样的 403。国际版：百炼国际站（`{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com`）与 QwenCloud（`dashscope-intl`）同样提供该模型，但 ccmr 目前没有国际版 Qwen provider，需要的话请开 issue\n- **关于 `qwen3.8-flash-next`**：它是 Qwen4 架构的开源预览版权重（[HF](https://huggingface.co/Qwen/Qwen3.8-Flash-Next)，Qwen Community License），百炼 / 千问 AI 平台 / QwenCloud / OpenRouter 均无该 id 的托管 API，官方说明线上正式版即 `qwen3.8-flash`。因此不提供路由——需要它的话直接用 `qwen3.8-flash`\n\n### v1.15.0\n\n- **新增 GLM-5.3**（[智谱文档](https://docs.bigmodel.cn/cn/guide/models/text/glm-5.3) / [Z.ai 文档](https://docs.z.ai/guides/llm/glm-5.3)）：智谱最新旗舰，1M 上下文、最大输出 128K，GLM Coding Plan 已全量上线。国内 `glm-plan-5.3` 与国际 `glm-global-5.3` 同步新增并设为默认——`glm` / `zhipu` / `glm-plan` 现指向 5.3，`glm-global` / `zai` 同理；5.2 保留（`glm-5.2` / `glm-plan-5.2` / `glm-global-5.2`）。注意：GLM-5.3 强制开启思考（`reasoning_effort` 支持 low/high/max，默认 max），上游不再接受 `thinking.type: \"disabled\"`\n- **新增 DeepSeek V4 Flash Vision（实验版）**（[视觉指南](https://api-docs.deepseek.com/guides/vision/)）：模型 `deepseek-v4-flash-vision-exp`（别名 `deepseek-vision` / `ds-vision`），DeepSeek 目前唯一支持图片输入的模型，Anthropic 协议 image block（base64 / url / file）直通可用；1M 上下文、最大输出 384K，价格与 V4 Flash 相同，复用 `DEEPSEEK_API_KEY` 与现有端点。文本默认模型不变（`deepseek` 仍指向 V4 Pro）；图片仅限 user 消息，文本模型收到图片会报 400\n\n### v1.14.0\n\n- **Qwen3.8 Max 正式版（GA）**：模型 ID 去掉 `-preview` 后缀，统一更新为 `qwen3.8-max`（旧 `qwen3.8-max-preview` 上游暂可用但已弃用），`qwen-plan-3.8-max` 同步切到 GA id\n- **恢复按量付费 `qwen3.8-max` 并设为默认**：正式版已开放按量付费（实测按量 key 在 dashscope Anthropic 端点返回 200，兑现 v1.11.1 的\"待开放后恢复\"）。裸别名 `qwen` / `tongyi` 及 `qwen3.8` / `qwen3.8-max` 现指向按量版 3.8；`qwen3.7-max`（别名 `qwen-max` / `qwen3.7`）保留\n\n### v1.13.0\n\n- 移除 **GLM-5.1**（国内 `glm-plan-5.1` 与国际 `glm-global-5.1`，别名 `glm-5` / `glm-5.1` 同步下线）：智谱官方已退役 5.1，Coding Plan 对旧模型的调用会被上游自动切换到 GLM-5.2，继续保留只会误导。GLM 现仅保留 5.2（国内 Coding Plan / 国际 Z.ai）\n\n### v1.12.0\n\n- **GLM 国内 provider 更名为 `glm-plan`（GLM Coding Plan）**，如实反映其订阅属性：`open.bigmodel.cn/api/anthropic` 是智谱国内唯一的 Anthropic 兼容端点，且被 Coding Plan 门控——按量付费 key / tokens 资源包实测返回 `429 [1309]`，[官方 FAQ](https://docs.bigmodel.cn/cn/coding-plan/faq) 明确资源包在 Claude Code 通道不可用、套餐额度耗尽也不转按量。模型键 `glm-5.2` / `glm-5.1` 变为 `glm-plan-5.2` / `glm-plan-5.1`，环境变量 `GLM_API_KEY` → **`GLM_PLAN_API_KEY`**（迁移：把订阅 key 换到新变量名即可）；旧别名 `glm` / `zhipu` / `chatglm` / `glm-5.2` / `glm-5.1` / `glm-5` 全部保留指向订阅模型，`/model glm` 不受影响\n- 说明：智谱国内**按量付费暂无法接入** ccmr——按量只提供 OpenAI 协议（`/api/paas/v4`），无 Anthropic 兼容端点（候选路径实测均 404），ccmr 是 Anthropic 协议直通网关不做协议转换；待智谱开通按量 Anthropic 端点后再支持。GLM Global（Z.ai `glm-global`）不受本次变更影响\n\n### v1.11.3\n\n- 修复 Qwen Token Plan 报 `403 invalid api-key`：Token Plan 有**专属 Anthropic 接入点** `https://token-plan.cn-beijing.maas.aliyuncs.com/apps/anthropic`（官方 Claude Code 接入参数确认），`sk-sp-` 订阅 Key 打到按量付费的 `dashscope.aliyuncs.com/apps/anthropic` 会被拒。v1.11.1 中\"与按量付费同一端点\"的说法有误，已更正 `qwen-plan` 的 `base_url` 及相关注释；Bearer 与 x-api-key 两种鉴权头实测均可用\n\n### v1.11.2\n\n- 修复 Kimi Code 订阅 `kimi-plan-k3-1m` 报 `401 ... recognized as other:k3[1m]`：上游 Model ID 应为纯 `k3`，`k3[1m]` 只是 Claude Code 原生环境变量写法（原生 CC 会剥掉 `[1m]` 再发 `k3`），作为第三方网关必须发 `k3`。改 `model_id: k3[1m] → k3`；1M 上下文仍由 `context_window` → `CLAUDE_CODE_AUTO_COMPACT_WINDOW` 提供，`kimi-plan-k3-1m` 与 `kimi-plan-k3` 现共用上游模型 `k3`、仅上下文窗口不同（依据 [Kimi Code 官方文档](https://www.kimi.com/code/docs/third-party-tools/claude-code.html)：k3[1m] 仅 Claude Code 环境变量场景需要，API 请求只填 k3）\n\n### v1.11.1\n\n- 修正 v1.11.0 的一个错误假设：**`qwen3.8-max-preview` 目前仅通过千问 Token Plan（`sk-sp-` 订阅 Key）发放**，按量付费账号调用返回 `403 Model.AccessDenied`（权限问题，且无自助开通入口）。因此：\n  - 从按量付费 `qwen` provider 移除 `qwen3.8-max` 变体，默认改回 `qwen3.7-max`；裸别名 `qwen` / `tongyi` 回指 `qwen3.7-max`\n  - 3.8 仅保留在 `qwen-plan` provider（订阅可用）；别名 `qwen3.8` / `qwen3.8-max` 现指向 `qwen-plan-3.8-max`\n  - 待阿里将该预览开放到按量付费后，再恢复 pay-go 变体\n\n### v1.11.0\n\n- 新增 **Qwen3.8 Max Preview**（`qwen3.8-max`，模型 ID `qwen3.8-max-preview`，阿里 2026-07-19 发布的 2.4T 旗舰预览版）：按量付费 `qwen` provider 的默认模型，裸别名 `qwen` / `tongyi` 现指向它；`qwen3.7-max`（别名 `qwen-max` / `qwen3.7`）保留\n- 新增 **Qwen Token Plan 订阅** provider（`qwen-plan-3.8-max`，别名 `qwen-plan`）：Key 来自 [千问 AI 平台](https://platform.qianwenai.com/) 的 `sk-sp-` 订阅密钥，需配置 `QWEN_PLAN_API_KEY`；走 DashScope 同一 Anthropic 兼容端点（`dashscope.aliyuncs.com/apps/anthropic`），但按订阅额度计费，另含 `qwen-plan-3.7-max`\n- 移除 **Qwen3.5 Plus / Qwen3.5 Flash**（`qwen3.5-plus`、`qwen3.5-flash` 及别名 `qwen3.5` 下线）\n\n### v1.10.0\n\n- 新增 Kimi Code 会员 coding 订阅入口（`api.kimi.com/coding`，Key 来自 [kimi.com 会员控制台](https://www.kimi.com/code/console)，与开放平台不互通）：需配置 `KIMI_CODE_API_KEY`，提供 `kimi-plan-k3-1m`（别名 `kimi-plan`，Allegretto 及以上）、`kimi-plan-k3`（Moderato 及以上，256K）、`kimi-plan-for-coding`（别名 `kimi-for-coding`，全档位）、`kimi-plan-for-coding-highspeed`；模型与上下文按会员档位限权\n- 兼容性说明：既有别名 `kimi-code` / `kimi-code-highspeed` 仍指向国际站 K2.7 Code 模型，含义不变；订阅版统一使用 `kimi-plan` 前缀（与 `step-plan` / `seed-plan` 命名一致）\n\n### v1.9.1\n\n- `ccmr claude` 启动模型缺少 API Key 时的指引拆分：若网关本身健康且有其他可用模型，直接提示 `ccmr use <可用模型>`（或 `--model` 单次指定、补配该模型的 Key），不再误导用户去 `ccmr stop` + `ccmr init` 重建配置；\"stop + init\"指引仅保留给网关完全无 Key 或不认识该模型的场景\n\n### v1.9.0\n\n- 新增 Kimi K3（Moonshot 旗舰，1M 上下文，`max_completion_tokens` 最高 1M）：国际站短名称 `kimi-k3`（别名 `k3`，沿用 `KIMI_API_KEY`）\n- 新增 Kimi 国内开放平台入口（`api.moonshot.cn/anthropic`，platform.kimi.com，原 platform.moonshot.cn）：需配置 `KIMI_CN_API_KEY`（与国际站 Key 不互通），提供 `kimi-cn-k3`（别名 `kimi-cn` / `k3-cn`）及 K2 系列 `kimi-cn-k2.6` / `kimi-cn-k2.7-code` / `kimi-cn-k2.7-code-highspeed`\n\n### v1.8.4\n\n- **修复 v1.8.3 回归**：网关不再校验单条消息的 role/content——Claude Code v2.1+ 会在 `messages` 中携带 `role: \"system\"` 的上下文条目，v1.8.3 的白名单校验导致所有真实会话在本地报 `400 messages[1].role must be user or assistant`。网关现在只校验路由自身依赖的结构，消息协议交由上游判定\n- `ccmr stop` 遇到无法自报 PID 的旧网关（v1.8.1 及更早）时，按平台给出手动停止命令（Windows 用 `netstat` + `taskkill`，不再显示无效的 `pkill`），并提示可改用其他端口\n- `ccmr claude` 拒绝复用旧网关时，同时给出\"换端口直接启动新网关\"的出路，不再只有先停旧网关一条指引\n\n### v1.8.3\n\n- 阻止 detached 网关跨项目复用错误的配置、端点或 API Key\n- 流式转发改用增量 UTF-8 解码，兼容 CRLF SSE；客户端断开会取消上游请求并处理背压，且不再误判为连接错误而触发 failover 或污染用量统计\n- `.env` 删除 Key 后会真正撤销，入站鉴权支持热轮换；内置客户端统一使用相同令牌\n- 非回环无鉴权监听改为默认拒绝，远程 `/health` 隐藏本机路径、PID 与 Key 状态\n- `ccmr stop` 增加本机随机身份记录校验，不再只信任 HTTP 自报 PID（旧版网关没有身份记录，沿用原停止方式，升级后仍可回收）\n- 显式配置路径、YAML、端口、超时和 CLI 数值参数改为严格校验；YAML/env/CLI 优先级保持一致\n- 实现兼容 `/v1/messages/count_tokens` 转发，并执行 streaming/tools 能力声明\n- 修复流式断连继续计费、生产依赖漏洞和缺失 LICENSE；CI/发布前新增依赖审计\n\n### v1.8.2\n\n- **新增 `ccmr status`**：列出本机正在运行的 ccmr 网关及其端口、PID、版本、配置来源、可用模型数。`ccmr claude` 自动拉起的网关是 detached 进程（关掉终端后继续运行），此前只能靠 `lsof` 才能找到它\n- **新增 `ccmr stop`**：停止网关，支持 `--port` / `--all` / `--force`。**只会停止通过 `/health` 自证身份的 ccmr 网关**；端口被其他程序占用时明确报错并拒绝操作，不会误杀无关进程\n- **`/health` 新增 `pid` 字段**：`status` / `stop` 因此无需解析 `lsof` / `netstat`，跨平台一致，且从原理上保证只能操作 ccmr 自己的进程\n- **修复日志目录不一致**：自动拉起的网关日志此前写死在 `~/.ccmr/gateway.log`，不随 `CCMR_HOME` 移动，导致配置和日志分居两地\n- README 补充网关生命周期说明（`ccmr start` 前台即退 vs `ccmr claude` 后台常驻）\n\n### v1.8.1\n\n修复一类隐蔽故障：网关在配置文件存在之前被 `ccmr claude` 自动拉起后，会静默地退回内置默认配置（零 API Key），且此后无论你怎么补配置都不会生效，表现为 Claude Code 里持续报 `401 API key not configured`。\n\n- **热重载改为监视「候选路径」而非「启动时已存在的文件」**：先起网关、后跑 `ccmr init --global`（或手工放置 `models.yaml` / `.env`）现在也能被捕获，约 1 秒内自动生效。此前这种情况下监视列表为空，热重载永不触发\n- **零可用模型时启动告警**：找不到配置文件、或 0 个模型有 API Key 时，启动横幅会明确警告并给出查找路径与修复命令，不再静默\n- **`ccmr claude` 启动前校验模型可用性**：复用已在运行的网关前先检查它能否服务目标模型；不能则直接报错，附上该网关的配置来源与 `pkill` 修复命令，而不是让你在 Claude Code 内部撞上 401\n- **`/health` 新增 `config_file` 与 `ccmr_home` 字段**：一条 `curl` 即可确认某个网关到底在用哪份配置\n\n> `ccmr start` 行为不变。自动拉起只在目标端口探测不到网关时触发。\n\n### v1.8.0\n\n**易用性**\n- 新增 `ccmr doctor [models...]`：对每个已配 Key 的模型发一条微型真实请求做连通性体检，一次性暴露端点错误、Key 失效、账号未开通模型等问题\n- 新增 `ccmr use <model>`：持久化切换默认模型（文本级改写 `default_model`，保留注释），运行中的网关自动生效\n- 新增 `ccmr stats` 与 `GET /usage`：按模型统计请求数 / 错误数 / 输入输出 tokens\n- `ccmr claude` 检测网关未启动时**自动拉起**（detached，日志在 `~/.ccmr/gateway.log`）；检测到网关与 CLI 版本不一致时给出警告\n- 配置热重载：网关运行中修改 `models.yaml` / `.env` 约 1 秒内自动生效，无需重启\n- 全局配置目录：`~/.ccmr/models.yaml` 与 `~/.ccmr/.env` 作为兜底（cwd 优先），`ccmr init --global` 一键生成；`CCMR_HOME` 可改写位置\n- 新增模型降级链：variant 级 `fallback: [...]`，上游 5xx/429/连接失败时按序切换备选模型\n\n**风险修复**\n- `ccmr init` 在 git 仓库内自动把 `.env` 加入 `.gitignore`，防止 API Key 被误提交\n- 移除 ESM-only 的 node-fetch（CJS 产物在 Node <22.12 会 `ERR_REQUIRE_ESM` 崩溃），改用 Node 18+ 内置 fetch，`engines: >=18` 恢复真实；同时移除未使用的 chalk 依赖\n- 流式转发增加空闲超时看门狗，上游挂死不再永久悬挂连接\n- 入站鉴权改为常量时间比较（`crypto.timingSafeEqual`）\n- 端口被占用时给出友好错误提示（原为裸堆栈崩溃）\n- 配置热重载遇到损坏的 YAML 时保留旧配置继续运行，不再静默退化为默认配置\n\n**工程化**\n- 引入 vitest 测试体系：路由解析 / URL 构建 / SSE 转发 / 鉴权 / 热重载 / failover / 用量统计，以及 DEFAULT_CONFIG 与 YAML 模板的一致性测试\n- 新增 GitHub Actions CI：Node 18/20/24 矩阵构建 + 测试 + dist 一致性校验\n\n### v1.7.1\n- 修正 Doubao Seed 接入点：按量付费应走 `https://ark.cn-beijing.volces.com/api/compatible`（而非旧 Coding Plan 的 `/api/coding`），模型 ID 带版本后缀 `doubao-seed-2-1-pro-260628` / `doubao-seed-2-1-turbo-260628`\n- 新增 Agent Plan 订阅入口 `seed-plan`（`https://ark.cn-beijing.volces.com/api/plan`，需 `ARK_PLAN_API_KEY`），与按量付费 `seed` 区分，模式同 `step` / `step-plan`\n- Kimi 新增 `kimi-k2.7-code` 与 `kimi-k2.7-code-highspeed`（编程专用，256K 上下文；别名 `kimi-code` / `kimi-highspeed`）\n- `ccmr claude` 启动时按所选模型的 `context_window` 自动注入 `CLAUDE_CODE_AUTO_COMPACT_WINDOW`（已自行设置则不覆盖），并在启动横幅显示当前模型与压缩窗口\n\n### v1.7.0\n- Qwen 旗舰升级为 Qwen3.7 Max（`qwen3.7-max`，别名 `qwen-max` / `qwen3.7`）\n- GLM 升级为 GLM-5.2 并区分国内/国际版：\n  - 国内版（智谱 `open.bigmodel.cn`）默认 `glm-5.2`，保留 `glm-5.1`\n  - 新增国际版（Z.ai `api.z.ai`），别名 `glm-global` / `zai`，需配置 `GLM_GLOBAL_API_KEY`\n- 新增字节豆包 Doubao Seed 2.1 Pro / Turbo（火山方舟 `ark.cn-beijing.volces.com`，Anthropic 协议），别名 `seed` / `seed-turbo` / `doubao`，需配置 `ARK_API_KEY`（目前仅国内版，国际版 BytePlus 暂未上线 Seed 2.1）\n\n### v1.3.3\n- CLI 和健康检查版本号改为从 `package.json` 读取，避免发布后显示旧版本\n\n### v1.3.1\n- MiniMax 默认端点切换为国内 Token Plan 兼容的 `https://api.minimaxi.com/anthropic`\n- 新增 MiniMax Global 入口，海外 API Key 可使用 `MINIMAX_GLOBAL_API_KEY` 和 `minimax-global-*` 模型\n- MiMo 默认切换为 Claude Code 文档推荐的 `mimo-v2.5-pro`，并区分 Token Plan 集群与 Pay-as-you-go API\n- `ccmr claude` 自动注入本地网关认证 token 和默认模型，避免误走官方 Claude Code 地区检查\n- DeepSeek 转发前移除 Claude Code 会话元数据，避免 `metadata.user_id` 格式触发上游 400 校验错误\n\n### v1.3.0\n- 新增供应商级 `providers -> variants` 配置结构，并兼容旧版平铺 `models` 配置\n- 移除 KAT-Coder-Pro V2\n- DeepSeek 更新为 DeepSeek V4 Pro / V4 Flash，并更新 Anthropic API 配置\n- Kimi 更新为 Kimi K2.6\n- GLM 更新为 GLM-5.1\n- MiniMax 新增 MiniMax M2.7 Highspeed\n- Qwen 新增 Qwen3.5 Flash 和 Qwen3 Max\n- 新增 MiMo V2.5\n\n### v1.2.0\n- 更新 GLM 模型至 GLM-5 版本\n- 更新 MiniMax 模型至 M2.7 版本\n- 更新 Qwen 模型至 Qwen3.5 Plus 版本\n- 更新 Kimi 模型至 K2.5 版本\n- 更新各模型的 context window 和 max tokens 参数\n- 新增版本别名支持（如 `glm-5`、`minimax-m2.7`、`qwen3.5-plus`、`kimi-k2.5`）\n\n### v1.1.0\n- 更新 MiniMax 模型至 M2.1 版本\n- 更新 GLM 模型至 4.7 版本\n- 更新 GLM API 端点至 `https://open.bigmodel.cn/api/anthropic`\n- 新增版本别名支持（如 `glm-4.7`、`minimax-m2.1`）\n- 优化日志显示，显示具体模型版本\n- 更新各模型的 context window 和 max tokens 参数\n\n### v1.0.1\n- 添加 Claude Code 原生参数支持\n\n### v1.0.0\n- 初始版本发布\n\n## License\n\n[MIT](LICENSE)\n","readmeFilename":"README.md"}