{"_id":"@dushayulll/dsh-model-catalog-refresh","_rev":"9-8e96b6d164e3a12f5710046690d46a09","name":"@dushayulll/dsh-model-catalog-refresh","dist-tags":{"latest":"0.3.0"},"versions":{"0.1.0":{"name":"@dushayulll/dsh-model-catalog-refresh","version":"0.1.0","keywords":["dsh","dsh-plugin","deepseek-harness","models","catalog","opencode-go","models.dev","restore","backup"],"author":"","license":"MIT","_id":"@dushayulll/dsh-model-catalog-refresh@0.1.0","maintainers":[{"name":"dushayu","email":"2480314208@qq.com"}],"homepage":"https://github.com/dushayulll/dsh-model-catalog-refresh#readme","bugs":{"url":"https://github.com/dushayulll/dsh-model-catalog-refresh/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"b43cb1e41a159b824a4c993e5233ebdacce81459","tarball":"https://registry.npmjs.org/@dushayulll/dsh-model-catalog-refresh/-/dsh-model-catalog-refresh-0.1.0.tgz","fileCount":18,"integrity":"sha512-xxAwH9vq1Rq9OHxFeQMc/F+pIgflB+1pobXwbCUGfY4sf73VigOgHZn6gsx1YKpxVGLZUb4PSWz4/cX6acnEDA==","signatures":[{"sig":"MEQCIAeu5uVkItk2Cmc4BS9ooGH0hbXKAXbyLS/F9dG58uW+AiAsrcLks4N8gzlICuQhpNlEPUgW+6vAzRsp7ohsOdeh6w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":89736},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":"^22.19.0 || >=24"},"exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./backup":{"types":"./lib/backup.d.ts","default":"./lib/backup.js"},"./catalog":{"types":"./lib/catalog.d.ts","default":"./lib/catalog.js"},"./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"gitHead":"aec243870c7750c181a3113c41e84167211ebd3f","scripts":{"test":"vitest run","build":"tsc -p tsconfig.json","verify":"pnpm typecheck && pnpm test && pnpm verify:pack","restore":"node scripts/restore.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest","verify:pack":"node scripts/verify-pack.mjs","prepublishOnly":"pnpm build && pnpm verify"},"_npmUser":{"name":"dushayu","email":"2480314208@qq.com"},"repository":{"url":"git+https://github.com/dushayulll/dsh-model-catalog-refresh.git","type":"git"},"_npmVersion":"11.6.0","description":"Append-only auto-sync for dsh llm-pi-ai provider catalogs (models.dev + OpenAI /models) with backup and restore. Discovers providers from your settings — no hard-coded provider in JSON.","directories":{},"_nodeVersion":"24.8.0","dependencies":{"yaml":"^2.7.0","@deepseek-ai/schemastery":"^3.18.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"^2.7.0","vitest":"^4.1.8","typescript":"^5.9.3","@types/node":"^24.13.3","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-timeout":"^0.1.0-rc.6","@deepseek-ai/schemastery":"^3.18.1","@deepseek-ai/dsh-settings":"^0.1.0-rc.6"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-timeout":"^0.1.0-rc.6","@deepseek-ai/dsh-settings":"^0.1.0-rc.6"},"peerDependenciesMeta":{"@deepseek-ai/cordis":{"optional":true},"@deepseek-ai/dsh-timeout":{"optional":true},"@deepseek-ai/dsh-settings":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-model-catalog-refresh_0.1.0_1787239503170_0.2855248809598956","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@dushayulll/dsh-model-catalog-refresh","version":"0.1.1","keywords":["dsh","dsh-plugin","deepseek-harness","models","catalog","opencode-go","models.dev","restore","backup"],"author":"","license":"MIT","_id":"@dushayulll/dsh-model-catalog-refresh@0.1.1","maintainers":[{"name":"dushayu","email":"2480314208@qq.com"}],"homepage":"https://github.com/dushayulll/dsh-model-catalog-refresh#readme","bugs":{"url":"https://github.com/dushayulll/dsh-model-catalog-refresh/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"7dfbdbe5a9ce2a566cc89252c51518884bd489d0","tarball":"https://registry.npmjs.org/@dushayulll/dsh-model-catalog-refresh/-/dsh-model-catalog-refresh-0.1.1.tgz","fileCount":18,"integrity":"sha512-iRwYE9NEkw9To8AcYmLjlFg41y8xTd00oAAuD1h2RryJB/qC2tzIw7XThdTWrLNw9c4MrMVRHH/PaqCaGzi2vQ==","signatures":[{"sig":"MEUCIQDXd/X02BXVdOjtVf8eGQfOHDTtNnctqAa6Ayx9OCrTsQIgBKA5bwwotPfopgfQprVFFQcimv0tPd4kysmZDowLZf4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":90229},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":"^22.19.0 || >=24"},"exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./backup":{"types":"./lib/backup.d.ts","default":"./lib/backup.js"},"./catalog":{"types":"./lib/catalog.d.ts","default":"./lib/catalog.js"},"./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"gitHead":"e86e6383b047e8adaf1ec9feceea910e19887913","scripts":{"test":"vitest run","build":"tsc -p tsconfig.json","verify":"pnpm typecheck && pnpm test && pnpm verify:pack","restore":"node scripts/restore.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest","verify:pack":"node scripts/verify-pack.mjs","prepublishOnly":"pnpm build && pnpm verify"},"_npmUser":{"name":"dushayu","email":"2480314208@qq.com"},"repository":{"url":"git+https://github.com/dushayulll/dsh-model-catalog-refresh.git","type":"git"},"_npmVersion":"11.6.0","description":"Append-only auto-sync for dsh llm-pi-ai provider catalogs (models.dev + OpenAI /models) with backup and restore. Discovers providers from your settings — no hard-coded provider in JSON.","directories":{},"_nodeVersion":"24.8.0","dependencies":{"yaml":"^2.7.0","@deepseek-ai/schemastery":"^3.18.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"^2.7.0","vitest":"^4.1.8","typescript":"^5.9.3","@types/node":"^24.13.3","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-timeout":"^0.1.0-rc.6","@deepseek-ai/schemastery":"^3.18.1","@deepseek-ai/dsh-settings":"^0.1.0-rc.6"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-timeout":"^0.1.0-rc.6","@deepseek-ai/dsh-settings":"^0.1.0-rc.6"},"peerDependenciesMeta":{"@deepseek-ai/cordis":{"optional":true},"@deepseek-ai/dsh-timeout":{"optional":true},"@deepseek-ai/dsh-settings":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-model-catalog-refresh_0.1.1_1787243500134_0.8870843801232935","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@dushayulll/dsh-model-catalog-refresh","version":"0.1.2","keywords":["dsh","dsh-plugin","deepseek-harness","models","catalog","opencode-go","models.dev","restore","backup"],"author":"","license":"MIT","_id":"@dushayulll/dsh-model-catalog-refresh@0.1.2","maintainers":[{"name":"dushayu","email":"2480314208@qq.com"}],"homepage":"https://github.com/dushayulll/dsh-model-catalog-refresh#readme","bugs":{"url":"https://github.com/dushayulll/dsh-model-catalog-refresh/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"56d8eb1f69dcf0ca3d49114c6b5f6a8c1ca2cea1","tarball":"https://registry.npmjs.org/@dushayulll/dsh-model-catalog-refresh/-/dsh-model-catalog-refresh-0.1.2.tgz","fileCount":18,"integrity":"sha512-Vez76AUNUaVbjFg0xtm6QZb46d5Iv2c22SMvzcmgXyw6WPsZOwrNwi6Yfkj7aPWiNdaeL93R5DNP7psbKs82nw==","signatures":[{"sig":"MEUCIBXCDWqBby6kShZk1acMRNSgb6AsoX+qTQ7sgxQzGKzhAiEA1Jkvg7xbJZhPZcTGrEcGb72JsLbSQpgQakhh3zOcKqk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":90335},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":"^22.19.0 || >=24"},"exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./backup":{"types":"./lib/backup.d.ts","default":"./lib/backup.js"},"./catalog":{"types":"./lib/catalog.d.ts","default":"./lib/catalog.js"},"./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"gitHead":"e86e6383b047e8adaf1ec9feceea910e19887913","scripts":{"test":"vitest run","build":"tsc -p tsconfig.json","verify":"pnpm typecheck && pnpm test && pnpm verify:pack","restore":"node scripts/restore.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest","verify:pack":"node scripts/verify-pack.mjs","prepublishOnly":"pnpm build && pnpm verify"},"_npmUser":{"name":"dushayu","email":"2480314208@qq.com"},"repository":{"url":"git+https://github.com/dushayulll/dsh-model-catalog-refresh.git","type":"git"},"_npmVersion":"11.6.0","description":"Append-only auto-sync for dsh llm-pi-ai provider catalogs (models.dev + OpenAI /models) with backup and restore. Discovers providers from your settings — no hard-coded provider in JSON.","directories":{},"_nodeVersion":"24.8.0","dependencies":{"yaml":"^2.7.0","@deepseek-ai/schemastery":"^3.18.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"^2.7.0","vitest":"^4.1.8","typescript":"^5.9.3","@types/node":"^24.13.3","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-timeout":"^0.1.0-rc.6","@deepseek-ai/schemastery":"^3.18.1","@deepseek-ai/dsh-settings":"^0.1.0-rc.6"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-timeout":"^0.1.0-rc.6","@deepseek-ai/dsh-settings":"^0.1.0-rc.6"},"peerDependenciesMeta":{"@deepseek-ai/cordis":{"optional":true},"@deepseek-ai/dsh-timeout":{"optional":true},"@deepseek-ai/dsh-settings":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-model-catalog-refresh_0.1.2_1787281408199_0.4225259220443225","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@dushayulll/dsh-model-catalog-refresh","version":"0.1.3","keywords":["dsh","dsh-plugin","deepseek-harness","models","catalog","opencode-go","models.dev","restore","backup"],"author":"","license":"MIT","_id":"@dushayulll/dsh-model-catalog-refresh@0.1.3","maintainers":[{"name":"dushayu","email":"2480314208@qq.com"}],"homepage":"https://github.com/dushayulll/dsh-model-catalog-refresh#readme","bugs":{"url":"https://github.com/dushayulll/dsh-model-catalog-refresh/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"5d87eba6db7c30b6bddbbe3f65c29d1a1e94475b","tarball":"https://registry.npmjs.org/@dushayulll/dsh-model-catalog-refresh/-/dsh-model-catalog-refresh-0.1.3.tgz","fileCount":22,"integrity":"sha512-hJpMBBtFGevzkZlmyZR0f6gOdpseJGo+dgWZRTuS4wW2f4nxtiEbU920wQHFn5jvazeN49zr235MR90yOtQ6zw==","signatures":[{"sig":"MEUCICsLp51q+4MRnn9dbnvhOOxm0y5pb1ruqysuWmg8slvVAiEAkaBG1mzx6i+m1kd3D/jriiShOnHHKO6X7wQ/tTTQB10=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":112427},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":"^22.19.0 || >=24"},"exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./proxy":{"types":"./lib/proxy.d.ts","default":"./lib/proxy.js"},"./backup":{"types":"./lib/backup.d.ts","default":"./lib/backup.js"},"./catalog":{"types":"./lib/catalog.d.ts","default":"./lib/catalog.js"},"./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"gitHead":"5a99dc74bd50ab0fbc4f6ef41fc452e547303874","scripts":{"test":"vitest run","build":"tsc -p tsconfig.json","verify":"pnpm typecheck && pnpm test && pnpm verify:pack","restore":"node scripts/restore.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest","verify:pack":"node scripts/verify-pack.mjs","prepublishOnly":"pnpm build && pnpm verify"},"_npmUser":{"name":"dushayu","email":"2480314208@qq.com"},"repository":{"url":"git+https://github.com/dushayulll/dsh-model-catalog-refresh.git","type":"git"},"_npmVersion":"11.6.0","description":"Append-only auto-sync for dsh llm-pi-ai provider catalogs (models.dev + OpenAI /models) with backup and restore. Discovers providers from your settings — no hard-coded provider in JSON.","directories":{},"_nodeVersion":"24.8.0","dependencies":{"yaml":"^2.7.0","undici":"^8.10.0","@deepseek-ai/schemastery":"^3.18.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"^2.7.0","vitest":"^4.1.8","typescript":"^5.9.3","@types/node":"^24.13.3","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-timeout":"^0.1.0-rc.6","@deepseek-ai/schemastery":"^3.18.1","@deepseek-ai/dsh-settings":"^0.1.0-rc.6"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-timeout":"^0.1.0-rc.6","@deepseek-ai/dsh-settings":"^0.1.0-rc.6"},"peerDependenciesMeta":{"@deepseek-ai/cordis":{"optional":true},"@deepseek-ai/dsh-timeout":{"optional":true},"@deepseek-ai/dsh-settings":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-model-catalog-refresh_0.1.3_1787311547857_0.9338104217019025","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@dushayulll/dsh-model-catalog-refresh","version":"0.1.4","keywords":["dsh","dsh-plugin","deepseek-harness","models","catalog","opencode-go","models.dev","restore","backup"],"author":"","license":"MIT","_id":"@dushayulll/dsh-model-catalog-refresh@0.1.4","maintainers":[{"name":"dushayu","email":"2480314208@qq.com"}],"homepage":"https://github.com/dushayulll/dsh-model-catalog-refresh#readme","bugs":{"url":"https://github.com/dushayulll/dsh-model-catalog-refresh/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"b6ad7ebafca818fa7d0e10d3dd3c5c7f4a29434a","tarball":"https://registry.npmjs.org/@dushayulll/dsh-model-catalog-refresh/-/dsh-model-catalog-refresh-0.1.4.tgz","fileCount":22,"integrity":"sha512-Z4VpvRYShComrHFKgm9LISw2IHQRDJBY0KceGpzxfVmyNmVParry3vZJtSMcPZRS7z51s55XntR7HrsBBQI/xQ==","signatures":[{"sig":"MEUCIA8KB41n33K3YHL1MQ2VNlBTVyjP98IR9M8OTqXUk11cAiEAoRWjBmMNwPO1xuq4t04FoxVOTzYlHdb+aaGk63d8G6o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":115747},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":"^22.19.0 || >=24"},"exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./proxy":{"types":"./lib/proxy.d.ts","default":"./lib/proxy.js"},"./backup":{"types":"./lib/backup.d.ts","default":"./lib/backup.js"},"./catalog":{"types":"./lib/catalog.d.ts","default":"./lib/catalog.js"},"./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"gitHead":"90b5b16af7659bf262be6772c48a01bf2db8fb4b","scripts":{"test":"vitest run","build":"tsc -p tsconfig.json","verify":"pnpm typecheck && pnpm test && pnpm verify:pack","restore":"node scripts/restore.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest","verify:pack":"node scripts/verify-pack.mjs","prepublishOnly":"pnpm build && pnpm verify"},"_npmUser":{"name":"dushayu","email":"2480314208@qq.com"},"repository":{"url":"git+https://github.com/dushayulll/dsh-model-catalog-refresh.git","type":"git"},"_npmVersion":"11.6.0","description":"Append-only auto-sync for dsh llm-pi-ai provider catalogs (models.dev + OpenAI /models) with backup and restore. Discovers providers from your settings — no hard-coded provider in JSON.","directories":{},"_nodeVersion":"24.8.0","dependencies":{"yaml":"^2.7.0","undici":"^8.10.0","@deepseek-ai/schemastery":"^3.18.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"^2.7.0","vitest":"^4.1.8","typescript":"^5.9.3","@types/node":"^24.13.3","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-timeout":"^0.1.0-rc.6","@deepseek-ai/schemastery":"^3.18.1","@deepseek-ai/dsh-settings":"^0.1.0-rc.6"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-timeout":"^0.1.0-rc.6","@deepseek-ai/dsh-settings":"^0.1.0-rc.6"},"peerDependenciesMeta":{"@deepseek-ai/cordis":{"optional":true},"@deepseek-ai/dsh-timeout":{"optional":true},"@deepseek-ai/dsh-settings":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-model-catalog-refresh_0.1.4_1787312826566_0.14934543379946374","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@dushayulll/dsh-model-catalog-refresh","version":"0.2.0","keywords":["dsh","dsh-plugin","deepseek-harness","models","catalog","opencode-go","models.dev","restore","backup"],"author":"","license":"MIT","_id":"@dushayulll/dsh-model-catalog-refresh@0.2.0","maintainers":[{"name":"dushayu","email":"2480314208@qq.com"}],"homepage":"https://github.com/dushayulll/dsh-model-catalog-refresh#readme","bugs":{"url":"https://github.com/dushayulll/dsh-model-catalog-refresh/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"a20e49ff4cb2450f3244ea8cbb8d77c3080886d2","tarball":"https://registry.npmjs.org/@dushayulll/dsh-model-catalog-refresh/-/dsh-model-catalog-refresh-0.2.0.tgz","fileCount":22,"integrity":"sha512-4FxwvD+3uHQP/mMJvYZB28aBkJoE9JNjssINUSPjloMpPzKCMgBDyloeZDuWFOid0+WmSyPCnyXSihCF9P3BXA==","signatures":[{"sig":"MEQCIHQfDQ9MIIBl1QOnCqhwF1VoeyMNPtRgiVN+jAVzCkDjAiAKjfItIxFwyx8jpGOLt7a2f2dx47Y5GWg3bpLbx4n5yQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":122729},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":"^22.19.0 || >=24"},"exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./proxy":{"types":"./lib/proxy.d.ts","default":"./lib/proxy.js"},"./backup":{"types":"./lib/backup.d.ts","default":"./lib/backup.js"},"./catalog":{"types":"./lib/catalog.d.ts","default":"./lib/catalog.js"},"./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"gitHead":"f75255a33e4d4c6134f2a1f2df6d6e50e25694f4","scripts":{"test":"vitest run","build":"tsc -p tsconfig.json","verify":"pnpm typecheck && pnpm test && pnpm verify:pack","restore":"node scripts/restore.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest","verify:pack":"node scripts/verify-pack.mjs","prepublishOnly":"pnpm build && pnpm verify"},"_npmUser":{"name":"dushayu","email":"2480314208@qq.com"},"repository":{"url":"git+https://github.com/dushayulll/dsh-model-catalog-refresh.git","type":"git"},"_npmVersion":"11.6.0","description":"Append-only auto-sync for dsh llm-pi-ai provider catalogs (models.dev + OpenAI /models) with backup and restore. Discovers providers from your settings — no hard-coded provider in JSON.","directories":{},"_nodeVersion":"24.8.0","dependencies":{"yaml":"^2.7.0","undici":"^8.10.0","@deepseek-ai/schemastery":"^3.18.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"^2.7.0","vitest":"^4.1.8","typescript":"^5.9.3","@types/node":"^24.13.3","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-timeout":"^0.1.0-rc.6","@deepseek-ai/schemastery":"^3.18.1","@deepseek-ai/dsh-settings":"^0.1.0-rc.6"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-timeout":"^0.1.0-rc.6","@deepseek-ai/dsh-settings":"^0.1.0-rc.6"},"peerDependenciesMeta":{"@deepseek-ai/cordis":{"optional":true},"@deepseek-ai/dsh-timeout":{"optional":true},"@deepseek-ai/dsh-settings":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-model-catalog-refresh_0.2.0_1787319587351_0.33502023392826863","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@dushayulll/dsh-model-catalog-refresh","version":"0.2.1","keywords":["dsh","dsh-plugin","deepseek-harness","models","catalog","opencode-go","models.dev","restore","backup"],"author":"","license":"MIT","_id":"@dushayulll/dsh-model-catalog-refresh@0.2.1","maintainers":[{"name":"dushayu","email":"2480314208@qq.com"}],"homepage":"https://github.com/dushayulll/dsh-model-catalog-refresh#readme","bugs":{"url":"https://github.com/dushayulll/dsh-model-catalog-refresh/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"b2c6809d211243510e3d94730ff660ddaa9c14cf","tarball":"https://registry.npmjs.org/@dushayulll/dsh-model-catalog-refresh/-/dsh-model-catalog-refresh-0.2.1.tgz","fileCount":22,"integrity":"sha512-LIcdRX/AvnnTnbSIByXp5KhYQfoi1ZoJo/ctlibTbx4QA4sbcWvRFlUPCrmwtPrkQNmVQRoz+dBiubl+g3Kz6g==","signatures":[{"sig":"MEYCIQDQ8G+bzBO0ci7cOJWiQglYheu+lTi8hFkuMD9Pdf/BeQIhAP14RAlkgrMBO7xUkp4ognjD4kpcmBdytJwhjSOo8Hbk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":125858},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":"^22.19.0 || >=24"},"exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./proxy":{"types":"./lib/proxy.d.ts","default":"./lib/proxy.js"},"./backup":{"types":"./lib/backup.d.ts","default":"./lib/backup.js"},"./catalog":{"types":"./lib/catalog.d.ts","default":"./lib/catalog.js"},"./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"gitHead":"99357e4f10f290e002430395cbb52195ae724772","scripts":{"test":"vitest run","build":"tsc -p tsconfig.json","verify":"pnpm typecheck && pnpm test && pnpm verify:pack","restore":"node scripts/restore.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest","verify:pack":"node scripts/verify-pack.mjs","prepublishOnly":"pnpm build && pnpm verify"},"_npmUser":{"name":"dushayu","email":"2480314208@qq.com"},"repository":{"url":"git+https://github.com/dushayulll/dsh-model-catalog-refresh.git","type":"git"},"_npmVersion":"11.6.0","description":"Append-only auto-sync for dsh llm-pi-ai provider catalogs (models.dev + OpenAI /models) with backup and restore. Discovers providers from your settings — no hard-coded provider in JSON.","directories":{},"_nodeVersion":"24.8.0","dependencies":{"yaml":"^2.7.0","undici":"^8.10.0","@deepseek-ai/schemastery":"^3.18.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"^2.7.0","vitest":"^4.1.8","typescript":"^5.9.3","@types/node":"^24.13.3","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-timeout":"^0.1.0-rc.6","@deepseek-ai/schemastery":"^3.18.1","@deepseek-ai/dsh-settings":"^0.1.0-rc.6"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-timeout":"^0.1.0-rc.6","@deepseek-ai/dsh-settings":"^0.1.0-rc.6"},"peerDependenciesMeta":{"@deepseek-ai/cordis":{"optional":true},"@deepseek-ai/dsh-timeout":{"optional":true},"@deepseek-ai/dsh-settings":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-model-catalog-refresh_0.2.1_1787492506099_0.8505082662365597","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@dushayulll/dsh-model-catalog-refresh","version":"0.2.2","keywords":["dsh","dsh-plugin","deepseek-harness","models","catalog","opencode-go","models.dev","restore","backup"],"author":"","license":"MIT","_id":"@dushayulll/dsh-model-catalog-refresh@0.2.2","maintainers":[{"name":"dushayu","email":"2480314208@qq.com"}],"homepage":"https://github.com/dushayulll/dsh-model-catalog-refresh#readme","bugs":{"url":"https://github.com/dushayulll/dsh-model-catalog-refresh/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"9c1574df8629094789851fddf8a2b76ad3cbbf42","tarball":"https://registry.npmjs.org/@dushayulll/dsh-model-catalog-refresh/-/dsh-model-catalog-refresh-0.2.2.tgz","fileCount":22,"integrity":"sha512-JGRvzfRgFff+BM5Of6xakamS9on5ytbHJMxz+CiWxAE3hKtwXou02QXP4FJZ99W/vae4Np/K32qjw3PCBesHdQ==","signatures":[{"sig":"MEQCIAykkKBjj9piwfbHjFS/G2iIjZNaL56jfaBgaR0W0GjQAiBZzVkS+AKjEVfGLJDM0l8FeNDy65AfOaUd/ye9yEG6/g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":127612},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":"^22.19.0 || >=24"},"exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./proxy":{"types":"./lib/proxy.d.ts","default":"./lib/proxy.js"},"./backup":{"types":"./lib/backup.d.ts","default":"./lib/backup.js"},"./catalog":{"types":"./lib/catalog.d.ts","default":"./lib/catalog.js"},"./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"gitHead":"b2b20fa7538d5ccf31b1d3cc0d3f0eeee16272d4","scripts":{"test":"vitest run","build":"tsc -p tsconfig.json","verify":"pnpm typecheck && pnpm test && pnpm verify:pack","restore":"node scripts/restore.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest","verify:pack":"node scripts/verify-pack.mjs","prepublishOnly":"pnpm build && pnpm verify"},"_npmUser":{"name":"dushayu","email":"2480314208@qq.com"},"repository":{"url":"git+https://github.com/dushayulll/dsh-model-catalog-refresh.git","type":"git"},"_npmVersion":"11.6.0","description":"Append-only auto-sync for dsh llm-pi-ai provider catalogs (models.dev + OpenAI /models) with backup and restore. Discovers providers from your settings — no hard-coded provider in JSON.","directories":{},"_nodeVersion":"24.8.0","dependencies":{"yaml":"^2.7.0","undici":"^8.10.0","@deepseek-ai/schemastery":"^3.18.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"^2.7.0","vitest":"^4.1.8","typescript":"^5.9.3","@types/node":"^24.13.3","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-timeout":"^0.1.0-rc.6","@deepseek-ai/schemastery":"^3.18.1","@deepseek-ai/dsh-settings":"^0.1.0-rc.6"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-timeout":"^0.1.0-rc.6","@deepseek-ai/dsh-settings":"^0.1.0-rc.6"},"peerDependenciesMeta":{"@deepseek-ai/cordis":{"optional":true},"@deepseek-ai/dsh-timeout":{"optional":true},"@deepseek-ai/dsh-settings":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-model-catalog-refresh_0.2.2_1787495075629_0.40682244888255115","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@dushayulll/dsh-model-catalog-refresh","version":"0.3.0","description":"Append-only auto-sync for dsh llm-pi-ai provider catalogs (models.dev + OpenAI /models) with backup and restore. Discovers providers from your settings — no hard-coded provider in JSON.","type":"module","main":"lib/index.js","types":"lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./catalog":{"types":"./lib/catalog.d.ts","default":"./lib/catalog.js"},"./backup":{"types":"./lib/backup.d.ts","default":"./lib/backup.js"},"./proxy":{"types":"./lib/proxy.d.ts","default":"./lib/proxy.js"},"./cordis.patch.yml":"./cordis.patch.yml","./package.json":"./package.json"},"license":"MIT","author":"","homepage":"https://github.com/dushayulll/dsh-model-catalog-refresh#readme","repository":{"type":"git","url":"git+https://github.com/dushayulll/dsh-model-catalog-refresh.git"},"bugs":{"url":"https://github.com/dushayulll/dsh-model-catalog-refresh/issues"},"keywords":["dsh","dsh-plugin","deepseek-harness","models","catalog","opencode-go","models.dev","restore","backup"],"engines":{"node":"^22.19.0 || >=24"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit","test":"vitest run","test:watch":"vitest","restore":"node scripts/restore.mjs","verify":"pnpm typecheck && pnpm test && pnpm verify:pack","verify:pack":"node scripts/verify-pack.mjs","prepublishOnly":"pnpm build && pnpm verify"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.2","@deepseek-ai/dsh-settings":"^0.1.5-rc.1","@deepseek-ai/dsh-timeout":"^0.1.5-rc.1"},"peerDependenciesMeta":{"@deepseek-ai/cordis":{"optional":true},"@deepseek-ai/dsh-settings":{"optional":true},"@deepseek-ai/dsh-timeout":{"optional":true}},"dependencies":{"@deepseek-ai/schemastery":"^3.18.2","undici":"^8.10.0","yaml":"^2.7.0"},"devDependencies":{"@deepseek-ai/cordis":"^4.0.2","@deepseek-ai/dsh-settings":"^0.1.5-rc.1","@deepseek-ai/dsh-timeout":"^0.1.5-rc.1","@deepseek-ai/schemastery":"^3.18.2","@types/node":"^24.13.3","typescript":"^5.9.3","vitest":"^4.1.8","yaml":"^2.7.0"},"_id":"@dushayulll/dsh-model-catalog-refresh@0.3.0","gitHead":"0ee720ef6ae325ab4a3faa97f13c8bcc8aee6b59","_nodeVersion":"24.8.0","_npmVersion":"11.6.0","dist":{"integrity":"sha512-6936H3mQDczjeJEJ+HRpdJR7utchL2CooIBx5VovYBdtnc+Cay7L+aJq2vdABu4TGo5OXnOm9hhgpG4jvUOiCw==","shasum":"2e0216da0f3ac4b55189b34aa3bbb264005df0f4","tarball":"https://registry.npmjs.org/@dushayulll/dsh-model-catalog-refresh/-/dsh-model-catalog-refresh-0.3.0.tgz","fileCount":22,"unpackedSize":135964,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCEhPjEBXiDy2r8uOREHjPkfNP6T3KRk1wqF2JD6D0wQQIgemkO5adBhMgONyjaiV8Y7XGflHU9LeNemB2lP4jgltQ="}]},"_npmUser":{"name":"dushayu","email":"2480314208@qq.com"},"directories":{},"maintainers":[{"name":"dushayu","email":"2480314208@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-model-catalog-refresh_0.3.0_1789117663240_0.8204574776637832"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-20T15:25:03.024Z","modified":"2026-09-11T09:07:43.608Z","0.1.0":"2026-08-20T15:25:03.329Z","0.1.1":"2026-08-20T16:31:40.266Z","0.1.2":"2026-08-21T03:03:28.363Z","0.1.3":"2026-08-21T11:25:47.999Z","0.1.4":"2026-08-21T11:47:06.713Z","0.2.0":"2026-08-21T13:39:47.494Z","0.2.1":"2026-08-23T13:41:46.248Z","0.2.2":"2026-08-23T14:24:35.785Z","0.3.0":"2026-09-11T09:07:43.387Z"},"bugs":{"url":"https://github.com/dushayulll/dsh-model-catalog-refresh/issues"},"license":"MIT","homepage":"https://github.com/dushayulll/dsh-model-catalog-refresh#readme","keywords":["dsh","dsh-plugin","deepseek-harness","models","catalog","opencode-go","models.dev","restore","backup"],"repository":{"type":"git","url":"git+https://github.com/dushayulll/dsh-model-catalog-refresh.git"},"description":"Append-only auto-sync for dsh llm-pi-ai provider catalogs (models.dev + OpenAI /models) with backup and restore. Discovers providers from your settings — no hard-coded provider in JSON.","maintainers":[{"name":"dushayu","email":"2480314208@qq.com"}],"readme":"# @dushayulll/dsh-model-catalog-refresh\n\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n[![Node](https://img.shields.io/badge/node-%3E%3D22-green.svg)](package.json)\n[![TypeScript](https://img.shields.io/badge/TypeScript-strict-3178c6.svg)](tsconfig.json)\n\n纯 host 型 [DeepSeek Harness (dsh)](https://github.com/deepseek-ai/dsh) 插件：\n自动发现用户**已经配置在 `llm-pi-ai.providers` 里的所有模型商**，并在 **DSH\n启动后一次性联网刷新**模型目录。插件配置里**不写死任何 provider**。\n\n**追加式（append-only）**：只往你的模型列表里追加新模型，绝不删减你已有的；\n原有条目的字段、顺序全部保持不变。原始配置会在写入前备份，卸载时可恢复。\n\n## 特性\n\n- **自动发现** — 读取 `llm-pi-ai.providers` 里现存的所有 provider；在 settings 里\n  新增 model 商，下次 DSH 启动自动纳入。\n- **追加式（只增加不减少）** — 你现有的 `models` 条目原样不动（字段、顺序），\n  只追加在线目录里发现的新模型 id。\n- **多数据源** — 认识的 provider 走 `models.dev`（无需凭据，含 context/output）；\n  OpenAI 兼容路由现场拉 `GET {baseURL}/models`。\n- **已知 provider 内置兜底** — models.dev 不可达时，若 provider 是本插件已知的\n  （目前为 `opencode-go`），自动使用其稳定的 OpenAI 兼容 `/models` 地址，并在下次\n  写入时自动补上 `api`/`baseURL`，用户无需手动改路由。\n- **校验安全的追加** — 不在 dsh 内置目录里的模型需要路由级 `api`/`baseURL`；\n  你没有声明时，插件从 models.dev 的 provider 元数据推断（`npm` 客户端 → 线协议、\n  provider `api` → baseURL），保证写入能通过 `dsh-llm-pi-ai` 校验。\n- **推理档位可调** — 追加的模型按 models.dev 的 `reasoning_options` 推导\n  `reasoningEfforts`（显式档位列表优先；否则默认 `low/medium/high`），\n  让思考等级在 DSH 里可直接调节，而不是被静默关死。\n- **输入模态保留** — 来源的 `text`/`image` 输入模态会保留到追加模型上\n  （不支持的如 `video` 会被安全丢弃），多模态模型既能声明输入，又不会让\n  dsh 校验失败。\n- **一次性，非轮询** — 启动后刷新一次，之后安静。\n- **可逆** — 首次写入前备份原始配置；卸载时自动恢复（尽力而为），或用独立的\n  `restore.mjs` 脚本兜底恢复（保证）。\n\n## 解决的问题\n\ndsh 的 `llm-pi-ai.providers.*` 模型列表是**纯静态**的：dsh 只读 `llm-pi-ai`\n配置节里写的东西，从不向 provider 查询它实际提供哪些模型。因此某个已配置平台\n新上线的模型（例如 opencode go 的 **Muse Spark 1.2 Contributor**）不会出现在\ndsh 里，除非手动写进 `settings.yaml`。本插件把这个\"手动写入\"自动化。\n\n## 工作机制\n\nDSH 启动后，插件等待 `startupDelayMs`（默认 5s），然后执行**一次**刷新：\n\n1. 从设置 seam 读取 `llm-pi-ai.providers`——**所有你已配置的模型商**。\n2. 每个 provider 自动选择数据源：\n   - **models.dev 认识该 provider** → 拉 `https://models.dev/api.json` 对应节点\n     （无需凭据，含 context/output 容量）；\n   - 否则该 provider 有 **OpenAI 兼容 `baseURL`** → 现场 `GET {baseURL}/models`\n     （有 `apiKeyEnv` 就带上）；\n   - 否则该 provider 是**带内置兜底的已知 provider**（当前为 `opencode-go`）→\n     自动使用其稳定的 OpenAI 兼容 `/models` 地址，并在写入时补上 `api`/`baseURL`；\n   - 否则 → 跳过，不动该路由。\n3. **追加式合并**：你现有的 `models` 条目**原样不动**（字段、顺序全部保持），\n   只把在线目录里新发现的 id 追加到末尾（在线目录内部的重复 id 只取第一个）。\n4. **为追加模型补全元数据**，让 dsh 能接受并正常服务：\n   - 按 models.dev 的 `reasoning_options` 推导 `reasoningEfforts`（显式档位列表\n     优先；否则默认 `low/medium/high`），思考等级可在 DSH 里调节；\n   - 来源 `modalities.input` 里的 `text`/`image` 输入模态会保留到追加模型上；\n     其余不支持的值（如 `video`）会被丢弃，避免写入校验失败；\n   - 未声明路由级 `api`/`baseURL` 时，从 models.dev provider 条目推断\n     （`npm` 客户端 → 线协议、provider `api` → baseURL）——内置目录之外的模型必需。\n5. 通过 `llm-pi-ai` 设置命名空间写入合并后的列表。\n\n`dsh-llm-pi-ai` 每次请求都会重读配置，因此**刷新后无需重启**，新模型下次请求即可选。\n新增的 provider 会在下次 DSH 启动时自动被纳入。\n\n> **不是轮询器**：只在 DSH 启动后刷一次，之后保持安静。\n\n## 备份与恢复\n\n插件在首次写入前会备份你的原始 `models` 列表，保证可以回到插件安装前的状态。\n\n### 备份内容\n\n每个被更新的 provider 会记录（默认 `$DSH_HOME/model-catalog-refresh-backup.json`）：\n- `hadExplicit`：你原来是否有 `models` 字段（vs 使用内置目录）；\n- `original`：你的原始模型列表；\n- `lastWritten`：插件最近一次写入的完整列表（用于检测你是否手动编辑过）。\n\n### 自动恢复（尽力而为）\n\n当 `restoreOnDispose: true`（默认）时，插件在销毁时（卸载/主机关闭）会尝试恢复\n原始配置。只有当当前列表与 `lastWritten` 一致时才恢复——如果你在插件写入后手动\n编辑过，自动恢复会跳过以避免覆盖你的修改。\n\n> 注意：主机正常关闭时也会触发销毁；由于插件每次启动都会重新刷新，DSH 运行期间\n> 目录始终最新，停止后回到原始——你不会感知到这个循环。\n\n### 脚本兜底恢复（保证可恢复）\n\n```bash\npnpm restore                    # 或：node scripts/restore.mjs\nnode scripts/restore.mjs --force  # 即使手动编辑过也强制恢复\n```\n\n脚本读取备份文件，用 `yaml` 包做 round-trip 解析，直接把原始配置写回 `settings.yaml`。\n幂等——运行两次不会有副作用。只有当所有 provider 都恢复成功时才删除备份文件；若有\n跳过则保留，以便用 `--force` 重试。\n\n## 配置项（均可选，不写死 provider）\n\n| 字段 | 默认 | 说明 |\n| --- | --- | --- |\n| `modelsUrl` | `https://models.dev/api.json` | models.dev 风格目录端点 |\n| `startupDelayMs` | `5000` | DSH 启动后延迟多少毫秒执行一次性刷新 |\n| `timeoutMs` | `30000` | 网络超时 |\n| `skipUnavailable` | `true` | 跳过 models.dev 标记 `available: false` 的模型 |\n| `maxModels` | `2000` | 每个 provider 的存储上限（安全阀）——只丢弃超额的**追加**条目，绝不截断你已有的条目（即使已超过上限） |\n| `refreshOpenAiCompatible` | `true` | 对自建 OpenAI 兼容路由做现场 `/models` 刷新 |\n| `backupPath` | `$DSH_HOME/model-catalog-refresh-backup.json` | 备份文件路径 |\n| `restoreOnDispose` | `true` | 销毁时自动恢复原始配置 |\n| `proxyUrl` | 空（自动探测） | 目录抓取代理。Node 的 fetch 不读 Windows 系统代理，本机走代理时请设为如 `http://127.0.0.1:7890`；留空则自动读 `HTTPS_PROXY`/`HTTP_PROXY` 环境变量；`\"direct\"` 强制直连 |\n\n## 安装\n\n> [!NOTE]\n> 使用前请确保已安装 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)。\n\n### npm\n\n```sh\ndsh plugin --profile web add @dushayulll/dsh-model-catalog-refresh\n```\n\n### 从源码构建\n\n```sh\ngit clone https://github.com/dushayulll/dsh-model-catalog-refresh.git\ncd dsh-model-catalog-refresh\npnpm install\npnpm build\ndsh plugin --profile web add .\n```\n\n修改源码后请重新执行 `pnpm build`。本地安装会继续链接到当前源码目录。\n\n### 运行时注入（免重启）\n\n开发或测试时，可跳过完整 profile 安装，直接注入本地包：\n\n```sh\ndev_inject_plugin → <本项目绝对路径>\n```\n\n### 验证\n\n检查组合配置、重启 DSH，确认模型目录已刷新：\n\n```sh\ndsh --profile web --dump-config\ndsh web\n```\n\nDSH 启动后，`settings.yaml` 中每个已配置 provider 应出现追加的新模型。\n\n## 兼容性\n\n- **DSH / dsh-core**：`0.1.5-rc.x`（peer 依赖 `@deepseek-ai/cordis ^4.0.2`、`@deepseek-ai/dsh-settings ^0.1.5-rc.1`、`@deepseek-ai/dsh-timeout ^0.1.5-rc.1`）\n- **Node.js**：`^22.19.0 || >=24`\n- **形态**：ESM、strict TypeScript\n\n> 针对 dsh `0.1.5-rc.1` 适配：settings seam 在每次写入时按 `llm-pi-ai` schema\n> 加适配器的可服务性校验验证完整解析值，且会把缺失的 `models` 键解析成空数组。\n> 插件改为从原始设置文档（`settings.describe().user`）读取\"用户是否显式声明过\n> `models` 列表\"，备份/恢复因此能正确区分\"显式声明\"与\"继承内置目录\"。\n\n## 开发\n\n```bash\npnpm install\npnpm build      # tsc → lib/\npnpm test       # vitest\npnpm verify     # typecheck + test + verify:pack\n```\n\n## 验证\n\n下次 DSH 启动后，`settings.yaml` 中每个已配置 provider 应出现追加的新模型，例如：\n\n```yaml\nllm-pi-ai:\n  providers:\n    opencode-go:\n      apiKeyEnv: OPENCODE_GO_API_KEY\n      models:\n        - id: deepseek-v4-flash      # ← 原始条目，保持不动\n          name: DeepSeek V4 Flash\n          contextWindow: 1000000\n          maxTokens: 384000\n        - id: muse-spark-1.2-contributor   # ← 自动追加\n          name: Muse Spark 1.2 Contributor\n          contextWindow: 1048576\n          maxTokens: 131072\n          input: [text, image]             # ← 输入模态（不支持的一律丢弃）\n          reasoningEfforts:              # ← 思考等级变为可调\n            off: null\n            minimal: minimal\n            low: low\n            medium: medium\n            high: high\n            xhigh: xhigh\n```\n\n也可以用一份临时的 `settings.yaml` + 备份文件 dry-run 一遍恢复流程，确认行为符合预期。\n\n## 卸载\n\n1. `dev_uninject_plugin`（匹配包名 `@dushayulll/dsh-model-catalog-refresh`）。\n2. 如果自动恢复没有执行（比如进程被杀），运行：\n   ```bash\n   pnpm restore\n   ```\n\n## 安全\n\n- **不存储凭据**：插件只读取 `apiKeyEnv` **名称**，在请求时经 dsh 的 credentials\n  seam 或环境变量解析。\n- `package.json` 的 `files` 白名单 + `verify:pack` 确保源码、测试与本地数据不会被打进\n  发布的包。\n\n## 许可证\n\n[MIT](LICENSE)\n","readmeFilename":"README.zh.md"}