{"_id":"@aiwayds/dsh-llm-proxy","_rev":"7-57562b5bf58443e22bfa00d05f1d6f6b","name":"@aiwayds/dsh-llm-proxy","dist-tags":{"latest":"0.5.0"},"versions":{"0.2.0":{"name":"@aiwayds/dsh-llm-proxy","version":"0.2.0","keywords":["dsh","dsh-plugin","plugin","proxy","undici","deepseek-harness","llm"],"author":{"name":"fliu56"},"license":"MIT","_id":"@aiwayds/dsh-llm-proxy@0.2.0","maintainers":[{"name":"aiwayds","email":"aiway.ds@qq.com"}],"homepage":"https://github.com/fan56/dsh-llm-proxy","bugs":{"url":"https://github.com/fan56/dsh-llm-proxy/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"9a6231f99a90fbbd394e3ad378d9094b7de143e0","tarball":"https://registry.npmjs.org/@aiwayds/dsh-llm-proxy/-/dsh-llm-proxy-0.2.0.tgz","fileCount":16,"integrity":"sha512-ajAoaX3ne1xG3bRCRrQdqGjS3eMjf6hvYEh8ad0UteS5KcCBhG+sXmVawta7OkWyJEyfhMIdpMIh/LkZ9CJKZA==","signatures":[{"sig":"MEUCIQDhA9Rkemy5z7KX6f0SA7C+BPlaT+ZlbMaTIjxg4tFz9AIgA8WQISv10r8nbgxHNniMkMLWyg8g814YFoFiZ75ECcU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":86808},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"a572971f1ea36d68962d2da82324f5745cd7289f","scripts":{"test":"node --test test/match.test.mjs test/router.test.mjs test/config.test.mjs test/skill.test.mjs test/dispose.test.mjs test/e2e.test.mjs","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","prepare":"npm run build","pretest":"npm run build"},"_npmUser":{"name":"aiwayds","email":"aiway.ds@qq.com"},"repository":{"url":"git+https://github.com/fan56/dsh-llm-proxy.git","type":"git"},"_npmVersion":"11.17.0","description":"dsh plugin: SYSTEM proxy (env) + LLM traffic-splitting proxy via a process-global undici routing dispatcher","directories":{},"_nodeVersion":"26.4.0","dependencies":{"undici":"8.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.0","@types/node":"^24.0.0","@deepseek-ai/cordis":"4.0.1","@deepseek-ai/dsh-skill":"0.1.1-rc.2","@deepseek-ai/schemastery":"3.18.1","@deepseek-ai/dsh-settings":"0.1.1-rc.2"},"peerDependencies":{"@deepseek-ai/cordis":"4.0.1","@deepseek-ai/dsh-skill":"0.1.1-rc.2","@deepseek-ai/schemastery":"3.18.1","@deepseek-ai/dsh-settings":"0.1.1-rc.2"},"peerDependenciesMeta":{"@deepseek-ai/cordis":{"optional":true},"@deepseek-ai/dsh-skill":{"optional":true},"@deepseek-ai/schemastery":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-llm-proxy_0.2.0_1788246803861_0.4310599761090901","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@aiwayds/dsh-llm-proxy","version":"0.3.0","keywords":["dsh","dsh-plugin","plugin","proxy","undici","deepseek-harness","llm"],"author":{"name":"fliu56"},"license":"MIT","_id":"@aiwayds/dsh-llm-proxy@0.3.0","maintainers":[{"name":"aiwayds","email":"aiway.ds@qq.com"}],"homepage":"https://github.com/fan56/dsh-llm-proxy","bugs":{"url":"https://github.com/fan56/dsh-llm-proxy/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"509aee9f62c9a440e5ca85d55226008ee88fb5c5","tarball":"https://registry.npmjs.org/@aiwayds/dsh-llm-proxy/-/dsh-llm-proxy-0.3.0.tgz","fileCount":20,"integrity":"sha512-GhZD8RWWkM1P3lr90NDfKs9JkxdXaqXvEatXtDxiRkMeOGtQ2fkKbSNxW+iWUcWjyQdoT0DLJguE0WhArVT0MQ==","signatures":[{"sig":"MEYCIQCOcQb99pFWLiNbSbIZUFje9a+9zZ7/UItXSYwUJGsVawIhAP8HFld/oen0MzUfNXF1Fhyn1Eku7+QSGdooPH65lsL1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDRVTRTdki4n7Gs4Fdromj68YfCGwn8EA2Gx/6y5zyvAwIgGE+2tAZ3Md1PuPxVo770mVKtzH1pKXdqfVjCmBd1d9k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aiwayds%2fdsh-llm-proxy@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":94685},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"e6e2053aaa167428a52b5112eba7d869bc13bf99","scripts":{"test":"node --test test/match.test.mjs test/router.test.mjs test/config.test.mjs test/skill.test.mjs test/dispose.test.mjs test/e2e.test.mjs","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","prepare":"npm run build","pretest":"npm run build"},"_npmUser":{"name":"aiwayds","email":"aiway.ds@qq.com"},"repository":{"url":"git+https://github.com/fan56/dsh-llm-proxy.git","type":"git"},"_npmVersion":"10.9.8","description":"dsh plugin: SYSTEM proxy (env) + LLM traffic-splitting proxy via a process-global undici routing dispatcher","directories":{},"_nodeVersion":"22.23.2","dependencies":{"undici":"8.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.0","@types/node":"^24.0.0","@deepseek-ai/cordis":"4.0.2","@deepseek-ai/dsh-skill":"0.1.2-alpha.3","@deepseek-ai/schemastery":"3.18.2","@deepseek-ai/dsh-settings":"0.1.2-alpha.3"},"peerDependencies":{"@deepseek-ai/cordis":"4.0.2","@deepseek-ai/dsh-skill":">=0.1.2-alpha.3","@deepseek-ai/schemastery":"3.18.2","@deepseek-ai/dsh-settings":">=0.1.2-alpha.3"},"peerDependenciesMeta":{"@deepseek-ai/cordis":{"optional":true},"@deepseek-ai/dsh-skill":{"optional":true},"@deepseek-ai/schemastery":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-llm-proxy_0.3.0_1788281540555_0.7291279388908387","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@aiwayds/dsh-llm-proxy","version":"0.3.1","keywords":["dsh","dsh-plugin","plugin","proxy","undici","deepseek-harness","llm"],"author":{"name":"fliu56"},"license":"MIT","_id":"@aiwayds/dsh-llm-proxy@0.3.1","maintainers":[{"name":"aiwayds","email":"aiway.ds@qq.com"}],"homepage":"https://github.com/fan56/dsh-llm-proxy","bugs":{"url":"https://github.com/fan56/dsh-llm-proxy/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"48c09f845737de2dcb498bb76a37a12bdb369e8f","tarball":"https://registry.npmjs.org/@aiwayds/dsh-llm-proxy/-/dsh-llm-proxy-0.3.1.tgz","fileCount":20,"integrity":"sha512-tGjM+Ms747wp5rm57wdaTR6GxsOHbAzYCC5vybiDIiuq31f5JurcblKjUHIoB6+KEOnJaBcziCLfig57aowogA==","signatures":[{"sig":"MEUCIQDpdA+ummWyIeFYD/RIcgv7FVu5OqVHDplYZNtU0NbJNAIgP328eURpY5nagjCWF9N8tfM6Sr+mjPpxgHq4FFhi4nc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDk1ix6w9ZHOGa4aN+eQtrtGSgJL2A/ZQE/fE8pp8L78AIhAMGy7N1Q8hJ+G725ZvDrnKuxuFMcGbW4Oiysg7KqnVDj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aiwayds%2fdsh-llm-proxy@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":94685},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"7a542c2762c5aef2d1dd1cf02f8f0e6c7475eece","scripts":{"test":"node --test test/match.test.mjs test/router.test.mjs test/config.test.mjs test/skill.test.mjs test/dispose.test.mjs test/e2e.test.mjs","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","prepare":"npm run build","pretest":"npm run build"},"_npmUser":{"name":"aiwayds","email":"aiway.ds@qq.com"},"repository":{"url":"git+https://github.com/fan56/dsh-llm-proxy.git","type":"git"},"_npmVersion":"10.9.8","description":"dsh plugin: SYSTEM proxy (env) + LLM traffic-splitting proxy via a process-global undici routing dispatcher","directories":{},"_nodeVersion":"22.23.2","dependencies":{"undici":"8.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.0","@types/node":"^24.0.0","@deepseek-ai/cordis":"4.0.2","@deepseek-ai/dsh-skill":"0.1.2-alpha.4","@deepseek-ai/schemastery":"3.18.2","@deepseek-ai/dsh-settings":"0.1.2-alpha.4"},"peerDependencies":{"@deepseek-ai/cordis":"4.0.2","@deepseek-ai/dsh-skill":">=0.1.2-alpha.4","@deepseek-ai/schemastery":"3.18.2","@deepseek-ai/dsh-settings":">=0.1.2-alpha.4"},"peerDependenciesMeta":{"@deepseek-ai/cordis":{"optional":true},"@deepseek-ai/dsh-skill":{"optional":true},"@deepseek-ai/schemastery":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-llm-proxy_0.3.1_1788338258412_0.25757329058343137","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@aiwayds/dsh-llm-proxy","version":"0.4.0","keywords":["dsh","dsh-plugin","plugin","proxy","undici","deepseek-harness","llm"],"author":{"name":"fliu56"},"license":"MIT","_id":"@aiwayds/dsh-llm-proxy@0.4.0","maintainers":[{"name":"aiwayds","email":"aiway.ds@qq.com"}],"homepage":"https://github.com/fan56/dsh-llm-proxy","bugs":{"url":"https://github.com/fan56/dsh-llm-proxy/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"9f26c6223cad169ff1cc85309da0a78f326be4f6","tarball":"https://registry.npmjs.org/@aiwayds/dsh-llm-proxy/-/dsh-llm-proxy-0.4.0.tgz","fileCount":20,"integrity":"sha512-9MLUGmjXLmtTlIVijBwfkmd6lj03zSwnZ1stuTFDJL2chK4y+Ctl1+9bQzpHejspGmQseRK3n6z0Mff2bjN5bA==","signatures":[{"sig":"MEYCIQDyewomwhmi4rAv8iKPlBgbNOxek7gvoBpRLbYw5odzhwIhAOV9VZjokxltPTct8zldEwmvwRZH7Zj1AaoMWY7MZ4YW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIC/EYk1Om7h3Zc64p20MyTVj3b/G+ANuS9kVXgWxKV22AiEAj4wdSEZ3li3eHYe+tCqG8NIS5CJNwanceFdMHW+KO44=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aiwayds%2fdsh-llm-proxy@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":94845},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"fc8d716f3679b07df2eebb47561dbc526a82899f","scripts":{"test":"node --test test/match.test.mjs test/router.test.mjs test/config.test.mjs test/skill.test.mjs test/dispose.test.mjs test/e2e.test.mjs","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","prepare":"npm run build","pretest":"npm run build"},"_npmUser":{"name":"aiwayds","email":"aiway.ds@qq.com"},"repository":{"url":"git+https://github.com/fan56/dsh-llm-proxy.git","type":"git"},"_npmVersion":"10.9.8","description":"dsh plugin: SYSTEM proxy (env) + LLM traffic-splitting proxy via a process-global undici routing dispatcher","directories":{},"_nodeVersion":"22.23.2","dependencies":{"undici":"8.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.0","@types/node":"^24.0.0","@deepseek-ai/cordis":"4.0.2","@deepseek-ai/dsh-skill":"0.1.2-rc.1","@deepseek-ai/schemastery":"3.18.2","@deepseek-ai/dsh-settings":"0.1.2-rc.1"},"peerDependencies":{"@deepseek-ai/cordis":"4.0.2","@deepseek-ai/dsh-skill":">=0.1.2-rc.1","@deepseek-ai/schemastery":"3.18.2","@deepseek-ai/dsh-settings":">=0.1.2-rc.1"},"peerDependenciesMeta":{"@deepseek-ai/cordis":{"optional":true},"@deepseek-ai/dsh-skill":{"optional":true},"@deepseek-ai/schemastery":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-llm-proxy_0.4.0_1788442419321_0.13775363860213585","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@aiwayds/dsh-llm-proxy","version":"0.4.1","keywords":["dsh","dsh-plugin","plugin","proxy","undici","deepseek-harness","llm"],"author":{"name":"fliu56"},"license":"MIT","_id":"@aiwayds/dsh-llm-proxy@0.4.1","maintainers":[{"name":"aiwayds","email":"aiway.ds@qq.com"}],"homepage":"https://github.com/fan56/dsh-llm-proxy","bugs":{"url":"https://github.com/fan56/dsh-llm-proxy/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"5cc364cc7c8041cf74e3df5da578fbf305bfd495","tarball":"https://registry.npmjs.org/@aiwayds/dsh-llm-proxy/-/dsh-llm-proxy-0.4.1.tgz","fileCount":20,"integrity":"sha512-SxmIY3T6s1pGLoHc/WpGzY0TPMU8cZjUHGR9uKMbqn4FFY3rYZ5mjn1S6OaAZLvUhaHjLmEVp37JcPuOU/+2hQ==","signatures":[{"sig":"MEUCIFXjKAXgPpE4QQxDbuzKp8o+PkWRWdo5QUcwuyLjbYYqAiEA/0FirEobueStTqmEp9+abBS/lzEG386S1XkQcoFidjg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIC1Vc2dKDXdWVLxAXYSR4uiOEHj9ePnA+fnKdFtVu9fSAiBIqZEocko5KsUXeONfpogWujbsvO9TbTPKHV4Hjp4wSw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aiwayds%2fdsh-llm-proxy@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":95609},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"c0cbb36867c0942c7698cee793d2c9d80242cb48","scripts":{"test":"node --test test/match.test.mjs test/router.test.mjs test/config.test.mjs test/skill.test.mjs test/dispose.test.mjs test/e2e.test.mjs","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","smoke":"node scripts/smoke-boot.mjs","prepare":"npm run build","pretest":"npm run build"},"_npmUser":{"name":"aiwayds","email":"aiway.ds@qq.com"},"repository":{"url":"git+https://github.com/fan56/dsh-llm-proxy.git","type":"git"},"_npmVersion":"10.9.8","description":"dsh plugin: SYSTEM proxy (env) + LLM traffic-splitting proxy via a process-global undici routing dispatcher","directories":{},"_nodeVersion":"22.23.2","dependencies":{"undici":"8.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.0","@types/node":"^24.0.0","@deepseek-ai/cordis":"4.0.2","@deepseek-ai/dsh-skill":"0.1.2-rc.1","@deepseek-ai/schemastery":"3.18.2","@deepseek-ai/dsh-settings":"0.1.2-rc.1"},"peerDependencies":{"@deepseek-ai/cordis":"4.0.2","@deepseek-ai/dsh-skill":">=0.1.2-rc.1","@deepseek-ai/schemastery":"3.18.2","@deepseek-ai/dsh-settings":">=0.1.2-rc.1"},"peerDependenciesMeta":{"@deepseek-ai/cordis":{"optional":true},"@deepseek-ai/dsh-skill":{"optional":true},"@deepseek-ai/schemastery":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-llm-proxy_0.4.1_1788603373188_0.9996433740623847","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@aiwayds/dsh-llm-proxy","version":"0.4.2","keywords":["dsh","dsh-plugin","plugin","proxy","undici","deepseek-harness","llm"],"author":{"name":"fliu56"},"license":"MIT","_id":"@aiwayds/dsh-llm-proxy@0.4.2","maintainers":[{"name":"aiwayds","email":"aiway.ds@qq.com"}],"homepage":"https://github.com/fan56/dsh-llm-proxy","bugs":{"url":"https://github.com/fan56/dsh-llm-proxy/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"b75b7042a6a565f98a1acee4edeff793d06c874b","tarball":"https://registry.npmjs.org/@aiwayds/dsh-llm-proxy/-/dsh-llm-proxy-0.4.2.tgz","fileCount":20,"integrity":"sha512-oVeiRjYSDf+XiBl43VCmmSyn3jlGaeFKll5mOJYl7fxCWztKGCzPiP1ok/TDHbkpoEByxlgnxFE/ioL1SLIAYQ==","signatures":[{"sig":"MEYCIQD/S1NLOfZTqCa5jSpsuRmNBizbmfwCZDmeuOpj4pF84gIhALvYPIf74axKHahcFyxwLqdLH5ailve6cOOCZPD8gLMh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQD8GumgItJ26GtD7TJdJO+IoAAYp4CcmUa0glw5mPchFAIhAO7rrzy3IFN+U4fcdORzvgL+pL1AExYaNcve6taxI/Gm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aiwayds%2fdsh-llm-proxy@0.4.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":95723},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"1ffdd6b0b8e174ebb32c2fed573f2b9e14ed352b","scripts":{"test":"node --test test/match.test.mjs test/router.test.mjs test/config.test.mjs test/skill.test.mjs test/dispose.test.mjs test/e2e.test.mjs","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","smoke":"node scripts/smoke-boot.mjs","prepare":"npm run build","pretest":"npm run build"},"_npmUser":{"name":"aiwayds","email":"aiway.ds@qq.com"},"repository":{"url":"git+https://github.com/fan56/dsh-llm-proxy.git","type":"git"},"_npmVersion":"10.9.8","description":"dsh plugin: SYSTEM proxy (env) + LLM traffic-splitting proxy via a process-global undici routing dispatcher","directories":{},"_nodeVersion":"22.23.2","dependencies":{"undici":"8.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.0","@types/node":"^24.0.0","@deepseek-ai/cordis":"4.0.2","@deepseek-ai/dsh-skill":"0.1.2-rc.1","@deepseek-ai/schemastery":"3.18.2","@deepseek-ai/dsh-settings":"0.1.2-rc.1"},"peerDependencies":{"@deepseek-ai/cordis":"4.0.2","@deepseek-ai/dsh-skill":">=0.1.2-rc.1","@deepseek-ai/schemastery":"3.18.2","@deepseek-ai/dsh-settings":">=0.1.2-rc.1"},"peerDependenciesMeta":{"@deepseek-ai/cordis":{"optional":true},"@deepseek-ai/dsh-skill":{"optional":true},"@deepseek-ai/schemastery":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-llm-proxy_0.4.2_1788914271719_0.6507809479571345","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"_id":"@aiwayds/dsh-llm-proxy@0.5.0","dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"bugs":{"url":"https://github.com/fan56/dsh-llm-proxy/issues"},"dist":{"shasum":"b2dfcd9bb41cfee72a6a755c09b4690bb51ebafb","tarball":"https://registry.npmjs.org/@aiwayds/dsh-llm-proxy/-/dsh-llm-proxy-0.5.0.tgz","fileCount":20,"integrity":"sha512-PQYG0IGgGYttDZioXqFEiyfdmtLtNvLVStVJsp+OUtUT3WBbt1Y0CpTF7ZwoOKecEzHMP43ToK52/G7SJBQqqw==","signatures":[{"sig":"MEUCIE/2otC8FaesNZ274j2R8wr7YmNzZosOVWTGv6d0D63QAiEAqHeD73pYrCLx40aTP9/9bl4Wzx8sXHJhBvfVhEMv+ts=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCrn4DQgXZLn+F8h3hAB3cLnn/bGDiCGeGxBFn4CTiAeQIhAK/z/NAODeMzfCbWLmJHHOls+HpKHok/MZByK7v4bK55"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aiwayds%2fdsh-llm-proxy@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":95723},"main":"lib/index.js","name":"@aiwayds/dsh-llm-proxy","type":"module","types":"lib/index.d.ts","author":{"name":"fliu56"},"engines":{"node":">=22.19.0"},"gitHead":"b8f0290c62e36d76de81144e10cac1cb4b736173","license":"MIT","scripts":{"test":"node --test test/match.test.mjs test/router.test.mjs test/config.test.mjs test/skill.test.mjs test/dispose.test.mjs test/e2e.test.mjs","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","smoke":"node scripts/smoke-boot.mjs","prepare":"npm run build","pretest":"npm run build"},"version":"0.5.0","_npmUser":{"name":"aiwayds","email":"aiway.ds@qq.com"},"homepage":"https://github.com/fan56/dsh-llm-proxy","keywords":["dsh","dsh-plugin","plugin","proxy","undici","deepseek-harness","llm"],"repository":{"url":"git+https://github.com/fan56/dsh-llm-proxy.git","type":"git"},"_npmVersion":"10.9.8","description":"dsh plugin: SYSTEM proxy (env) + LLM traffic-splitting proxy via a process-global undici routing dispatcher","directories":{},"maintainers":[{"name":"aiwayds","email":"aiway.ds@qq.com"}],"_nodeVersion":"22.23.2","dependencies":{"undici":"8.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.0","@types/node":"^24.0.0","@deepseek-ai/cordis":"4.0.2","@deepseek-ai/dsh-skill":"0.1.5-rc.2","@deepseek-ai/schemastery":"3.18.2","@deepseek-ai/dsh-settings":"0.1.5-rc.2"},"peerDependencies":{"@deepseek-ai/cordis":"4.0.2","@deepseek-ai/dsh-skill":">=0.1.5-rc.2","@deepseek-ai/schemastery":"3.18.2","@deepseek-ai/dsh-settings":">=0.1.5-rc.2"},"peerDependenciesMeta":{"@deepseek-ai/cordis":{"optional":true},"@deepseek-ai/dsh-skill":{"optional":true},"@deepseek-ai/schemastery":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-llm-proxy_0.5.0_1789098230234_0.822249101839122"}}},"time":{"created":"2026-09-01T07:13:23.642Z","modified":"2026-09-11T03:43:50.613Z","0.2.0":"2026-09-01T07:13:24.001Z","0.3.0":"2026-09-01T16:52:20.639Z","0.3.1":"2026-09-02T08:37:38.492Z","0.4.0":"2026-09-03T13:33:39.430Z","0.4.1":"2026-09-05T10:16:13.291Z","0.4.2":"2026-09-09T00:37:51.806Z","0.5.0":"2026-09-11T03:43:50.317Z"},"bugs":{"url":"https://github.com/fan56/dsh-llm-proxy/issues"},"author":{"name":"fliu56"},"license":"MIT","homepage":"https://github.com/fan56/dsh-llm-proxy","keywords":["dsh","dsh-plugin","plugin","proxy","undici","deepseek-harness","llm"],"repository":{"url":"git+https://github.com/fan56/dsh-llm-proxy.git","type":"git"},"description":"dsh plugin: SYSTEM proxy (env) + LLM traffic-splitting proxy via a process-global undici routing dispatcher","maintainers":[{"name":"aiwayds","email":"aiway.ds@qq.com"}],"readme":"# dsh-llm-proxy\n\ndsh 插件：**SYSTEM proxy + LLM 分流代理**。通过一个进程级 undici 路由 Dispatcher，\n把 LLM 流量按配置列表分流到指定代理，其余流量走系统代理（启动环境变量），都没配则直连。\n\n## 优先级语义\n\n```\nLLM 列表命中 > SYSTEM proxy（env 语义）> 直连\n```\n\n- 请求 origin 命中 `llmProxy` 列表条目 → 走该条目指定的代理（undici `ProxyAgent`）\n- 未命中 → 走共享的 undici `EnvHttpProxyAgent`，它自己处理\n  `HTTPS_PROXY` / `HTTP_PROXY` / `ALL_PROXY` / `NO_PROXY`\n  （大小写均兼容）——即标准 env 代理语义\n- SYSTEM 也未配置 → 直连\n\n> 环境变量**只读不写**：插件不会修改 `process.env.HTTP_PROXY`——对已启动进程无意义。\n\n## 安装\n\n```bash\n# 方式一：作为 npm 插件加入 profile\ndsh plugin add @aiwayds/dsh-llm-proxy   # 或在 settings.yaml 的 plugins 里声明\n\n# 方式二：手动 patch 挂载（本包自带 cordis.patch.yml）\n# 在 profile 的 bundles 中插入：\n#   - id: dsh-llm-proxy\n#     name: '@aiwayds/dsh-llm-proxy'\n```\n\n> **要求 dsh >= 0.1.5-rc.2** — 本插件只跟随 dsh RC/stable 线（CI 与发版在运行时解析 latest/next 中更新的 dist-tag）。**不再支持 alpha 线。**\n\n> ⚠️ 最低宿主要求：0.2.0 起本插件声明 `inject: ['skills']`，要求宿主 dsh 提供 skills\n> 服务（`@deepseek-ai/dsh-skill` 0.1.1-rc 系列+）。无该服务的旧宿主上，本插件（含代理\n> 路由功能）不会加载。\n\n> 发布状态：本包已发布到 npm（0.2.0，自带内置 skill），方式一\n> `dsh plugin add @aiwayds/dsh-llm-proxy` 即可直接用。\n\n## 卸载\n\n```bash\ndsh plugin --profile <profile> remove @aiwayds/dsh-llm-proxy\n```\n\n宿主自动清理：profile 清单里的 `dsh.profile.bundles` 条目被摘除，本包的 patch 层随之卸下。\n\n插件自身**不在磁盘上留下任何状态**——不写任何文件，环境变量只读不写；进程级 undici/fetch 全局接管的拆除是对称且经过测试的（`test/dispose.test.mjs` 覆盖 dispose 后 globals 还原与 HMR 窗口），dispose 干净。\n\n会留存的只有**手动安装的 skill**（见上文 Skill 一节），需手工删除：\n\n```bash\nrm ~/.dsh/skills/dsh-llm-proxy-config    # 手动拷贝/软链的副本\nrm -r ~/.agents/skills/dsh-llm-proxy-config   # npx skills add 装出的条目\n```\n\n## Skill（内置使用指南）\n\n本仓库自带一个 dsh skill（`skills/dsh-llm-proxy-config/SKILL.md`）：面向 agent 的配置 + 排障\n使用指南，frontmatter `description` 内嵌触发词（dsh 代理、HTTP 代理、LLM 分流、llmProxy、\n407、CONNECT 挂起、SOCKS、NODE_USE_ENV_PROXY 等），进入每会话模型目录用于路由。三种获取方式：\n\n1. **随插件自动注册（零操作）**：通过 npm 包或 bundle（cordis.patch.yml）挂载本插件后，\n   skill 随插件 `apply()` 自动注册——进入每会话 skill 目录（`<available_skills>`，\n   frontmatter `description` 供模型路由），`/dsh-llm-proxy` 手势可直接调出指南（已实测可用）。\n2. **GitHub 安装（不装插件，只要 skill）**：\n\n   ```bash\n   npx skills add fan56/dsh-llm-proxy   # 安装到 ~/.agents/skills/\n   ```\n\n3. **手动**：`git clone` 本仓库后，把 `skills/dsh-llm-proxy-config/` 拷贝或软链到 `~/.dsh/skills/`：\n\n   ```bash\n   git clone https://github.com/fan56/dsh-llm-proxy.git\n   ln -s \"$(pwd)/dsh-llm-proxy/skills/dsh-llm-proxy-config\" ~/.dsh/skills/dsh-llm-proxy-config\n   ```\n\n⚠️ 铁律：本包的 `@deepseek-ai/*` 只声明在 **peerDependencies**\n（devDependencies 保留供本地构建）。请勿把它们挪进 dependencies——那会装出第二份\ncordis 闭包，导致双实例崩溃（详见 dsh 生态 link-dsh-closure 机制）。\n\n## 配置入口（settings.yaml 命名空间段）\n\ndsh 插件的用户配置唯一入口是 **settings.yaml 里按插件 id 命名的命名空间段**。本插件通过\n`@deepseek-ai/dsh-settings`（要求 `>=0.1.5-rc.2`）settings provider 的\n`installSection` 注册了 `dsh-llm-proxy` 命名空间\n（与 harness 内置插件 `llm-deepseek` 的 `llm-deepseek:` 段同机制），所以请在\n`~/.dsh/settings.yaml` 写：\n\n```yaml\ndsh-llm-proxy:\n  enabled: true                    # 总开关，默认 true；false 时完全不动全局\n  systemMode: env                  # 'env'（默认，读环境变量）| 'off'（全部直连，仅 llmProxy 生效）\n  llmProxy:                        # 匹配列表，按顺序首条命中生效\n    - match: \"api.deepseek.org\"    # 域名精确匹配（含任意端口）\n      proxy: \"http://127.0.0.1:7890\"\n    - match: \"*.volces.com\"        # 通配：volces.com 本身 + 任意子域\n      proxy: \"http://127.0.0.1:7891\"\n    - match: \"https://api.openai.com\"  # 完整 origin 精确匹配（大小写不敏感）\n      proxy: \"http://127.0.0.1:7892\"\n```\n\n要点：\n\n- **顶层键必须是 `dsh-llm-proxy:`**（与插件 id 一致）。写其他键（如 `llm-proxy:`）不会\n  被读到，静默失效。\n- 编辑 settings.yaml **热生效**：settings provider 发布变更后，插件会拆掉旧 router、按新\n  配置重建，无需重启。\n- bundle entry config（`cordis.patch.yml` insert 行的 `config:`）作为 base 层仍然有效；\n  settings.yaml 段覆盖其上的同名键。\n- 未挂载 settings 服务的宿主自动回退到 entry config，插件照常工作。\n\n### match 规则\n\n| 写法 | 含义 |\n|------|------|\n| `api.example.com` | host 精确匹配，**任意端口**都算命中 |\n| `api.example.com:8443` | host + 显式端口必须相等（https 默认 443 / http 默认 80 会补全比较） |\n| `*.example.com` | `example.com` 本身及任意层级子域 |\n| `https://api.example.com` | 完整 origin 精确匹配（scheme 也要一致） |\n\n匹配全部大小写不敏感、纯词法比较（无 DNS/IO）。IDN 域名在匹配前统一归一化为 punycode\n（`中文.com` 与 `xn--fiq228c.com` 两种写法等价，pattern 和 origin 两侧对称处理）。\n实现为纯函数（`src/match.ts`），有完整单测。\n\n### proxy 协议限制\n\nundici `ProxyAgent` 只支持 **http:// 与 https://** 上游代理。\n`socks5://` 等 schema 在启动校验时直接报错（fail-fast），README 明说：**SOCKS 不支持**。\n\n## 实现要点\n\n- service start 时创建自定义 undici 路由 Dispatcher 并 `setGlobalDispatcher(router)`；\n  router 的 `dispatch()` 按 origin 分流：命中 → 该条的 `ProxyAgent`（按 URL 缓存复用）；\n  未命中 → 共享 `EnvHttpProxyAgent`（或 `systemMode: off` 时直连 `Agent`）。\n- **照抄 pi-src 生产模板的防御细节**：\n  - `undici.install?.()` 防 Node 内建 fetch 与 npm undici 版本偏斜 bug\n    （Node 26 bundled fetch 经 npm undici dispatcher 不解压导致 `response.json()`\n    失败）；用 pristine/owned 双守卫只在未被替换时 install。\n  - undici Client 中途断流会发裸 `error` 事件导致 unhandled crash——对本插件创建的\n    每个 dispatcher 挂 EventEmitter 级 error 兜底 listener（与 pi-src\n    `http-dispatcher.ts` 同款机制，覆盖进程内所有由本插件创建的 dispatcher）。\n- **HMR 重载窗口闭环**：接管状态（原始 dispatcher/fetch + 活跃层列表）存放在\n  `Symbol.for` 共享槽位，跨模块副本可见。cordis `Group.update` 先 create 后 remove、\n  vendor HMR 先 re-import 后 dispose——新版 apply 可能发生在旧版 dispose 之前；\n  dispose 只摘除自己那一层，把 globals 还给最近的存活层，绝不打掉别人的路由器。\n- dispose（cordis effect 语义）时**非阻塞拆除**：先把 globals 还回去（新请求立即不再\n  进入旧 router），再后台 fire-and-forget 地 `close()` 排空在途请求——长 LLM 流式响应\n  不会拖住热重载。\n- proxy URL 中可能出现的 userinfo 凭证（`user:pass@host`）在日志/error message 里一律\n  脱敏为 `***@host`。\n- 与 `NODE_USE_ENV_PROXY` 官方姿势的关系：本插件是等价替代——无需该变量、无需重启，\n  对新请求即时生效，且额外提供 LLM 分流能力。\n\n## 手动 e2e 验证（CI 无网，不做真实请求测试）\n\n```bash\n# 1. 配一个本地回显代理（如 clash/mihomo 的 mixed-port 7890）\nexport HTTPS_PROXY=http://127.0.0.1:7890\n# 2. settings.yaml 配 dsh-llm-proxy 段，把某个 API 域名指到另一端口\n# 3. 启动 dsh 后发起对话，观察代理访问日志：\n#    - llmProxy 命中域名的请求出现在该条代理日志里\n#    - 其他外网请求出现在 7890 日志里\n# 4. unset HTTPS_PROXY 重启 → 只有 llmProxy 命中的流量走代理，其余直连\n```\n\n## 开发\n\n```bash\nnpm run build   # tsc -> lib/\nnpm run check   # tsc --noEmit\nnpm test        # node --test（match / router 探针分流 / config 边界 / skill 注册 /\n                # dispose 对称性 / e2e 全链路：apply → 全局 fetch 分流 → dispose 恢复 + HMR 窗口回归）\n```\n","readmeFilename":"README.md"}