在模型设置页开关供应商,停用即移除路由并自动存档
30.8/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/10 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
该插件未发布到 npm,按作者文档从 GitHub 源安装即可(静态检查只覆盖 npm 路径,不代表插件不可用)。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dunlingzi/dsh-provider-toggle该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · model
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 21 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装仓库 package.json 标记 private,未发布到 npm,需从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-provider-toggle(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖要求 >=0.2.0-rc.1 <0.3.0-0 · 最新 0.2.1-rc.2 兼容
✓入口文件main/exports/bin 已声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/20 00:17:46
安全扫描自动 · 静态分析源码v2.7.0🟢 扫描:未发现敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 开关模型服务商
- 停用移除路由
- 配置档归档还原
DeepSeek Harness 的模型设置页给模型服务商加了启用/停用开关:停用会真正移除 pi-ai 路由(模型选择器和所有选择器里都不再出现),完整配置档会归档,重新启用时逐字段还原。
README
由 DeepSeek 最新模型翻译生成dsh-provider-toggle
为 DeepSeek Harness 的 设置 → 模型 页提供模型供应商的启用/停用开关,并在页脚给出一个存档列表,让停用的供应商能回到配置里。
停用是真正的停用:它 unset llm-pi-ai.providers.<route> —— 与官方「删除供应商」按钮执行的是同一处写入 —— 因此路由会注销,供应商会从 composer 选择器与子代理选择共同读取的模型目录里消失。由于这次写入删掉的是整段配置,插件会先把它原样存档进自己的设置项,启用时逐字段还原(所有手写字段 —— headers、compat、reasoningEfforts、逐模型覆盖 —— 都能往返,因为存档字段是开放类型的)。
针对 DSH 0.2.0-rc.2(desktop 档)构建。无构建步骤:两半都是纯 JavaScript。
它渲染什么
| 位置 | 槽位 | 内容 |
| 供应商行 | settings.models.provider-card(keyed llm-pi-ai) | 每个自定义供应商卡片内的一行设置项 —— 左标题、右开关 |
| 页面页脚 | settings.models.footer | 全部已存档供应商,以及用于恢复它们的开关 |
被停用的供应商不再有行留存,所以页脚是它唯一能被重新启用的地方。
展开完整文档(README 剩余 1 节)
dsh-provider-toggle 为 DeepSeek Harness 的 设置 → 模型 页提供模型供应商的启用/停用开关,并在页脚给出一个存档列表,让停用的供应商能回到配置里。 停用是真正的停用:它 unset llm-pi-ai.providers.<route> —— 与官方「删除供应商」按钮执行的是同一处写入 —— 因此路由会注销,供应商会从 composer 选择器与子代理选择共同读取的模型目录里消失。由于这次写入删掉的是整段配置,插件会先把它原样存档进自己的设置项,启用时逐字段还原(所有手写字段 —— headers、compat、reasoningEfforts、逐模型覆盖 —— 都能往返,因为存档字段是开放类型的)。 针对 DSH 0.2.0-rc.2(desktop 档)构建。无构建步骤:两半都是纯 JavaScript。 它渲染什么 | 位置 | 槽位 | 内容 | | 供应商行 | settings.models.provider-card(keyed llm-pi-ai) | 每个自定义供应商卡片内的一行设置项 —— 左标题、右开关 | | 页面页脚 | settings.models.footer | 全部已存档供应商,以及用于恢复它们的开关 | 被停用的供应商不再有行留存,所以页脚是它唯一能被重新启用的地方。存档为空时,页脚完全不出现在页面上。 它把自己当页面的访客,而不是自成一套。 该行用的是宿主自己的「带标签开关行」(dsh-client-ui-settings-general 的 DeveloperToolsRow):左侧是标题 + 描述块,字号沿用宿主;右侧是控件,两者间距 24px —— 开关是宿主 Switch 在 dpt- 前缀下的一份拷贝(36×20,关态 --dsw-alias-border-l3/开态 --dsw-alias-brand-primary,120ms 滑动,禁用时半透明)。该行刻意不带自己的 margin、padding 或 border,因为卡片本身已经是一个 gap:12px 的纵向 flex。被阻断的原因就是该行的 description,失败信息以 role="alert" 渲染在这个文本块内 —— 与宿主放置它们的位置完全一致。引用的每一个自定义属性都是 --dsw-* 主题令牌,任何地方都不出现字面色值;tests/run.mjs 对以上全部做了断言。 截图 pi-ai 供应商在 设置 → 模型 页拿到的那一行 —— 宿主自己的带标签行,插件开关在右侧: 供应商行及其启用/停用开关 被守卫拦下的行会通过该行的 description 自我说明,位置正是宿主放说明文案的地方 —— 这里 agent 的默认模型指向了该供应商,同时子代理策略仍然列着它: 被阻断的行,同时显示默认模型阻断与子代理警告 页脚存档 —— 被停用供应商唯一能被重新打开的地方,因为它自己的行已经没了: 页脚存档列出被停用的供应商 截图取自实机 profile。图中的供应商名是本仓库通篇使用的虚构示例。 用法 1. 设置 → 模型。 每个 pi-ai 供应商行末尾都有一个开关。本 README 与 tests/ 里的供应商名均为虚构(Acme Local、Acme Relay (OpenAI)、Globex Cloud)。 2. 点它停用。该行消失,供应商从模型选择器里消失,页脚存档里出现它的条目。 3. 在页脚点它的开关启用。供应商带着与停用前逐字节相同的配置回来,它的行也回来了。 状态存在 profile patch 里(profiles/<profile>/cordis.patch.yml → - id: provider-toggle → config.disabled),所以重启后依然有效。 守卫规则 | 情况 | 行为 | | agent 的默认模型指向该供应商 | 开关被禁用并显示原因。请先切换默认模型。 | | 该供应商同时出现在子代理可选模型里 | 允许停用并显示警告;那条可选模型条目将失效。 | | 该供应商在组合层里也有声明 | 拒绝 —— unset 用户 profile 不会把它摘下来,所以插件不假装做到了。 | | 期间有别人改了设置 | 按冲突拒绝,重新读取文档,可重试。 | | 设置文档只读 | 用宿主自己的消息拒绝该操作。 | 安装(desktop 档) profile 的 package.json 只允许写精确的 registry 版本号,所以本地 tarball 是通过 pnpm-workspace.yaml 的 overrides 装进去的(第 2 步有两处): $REPO = '<this checkout>' $DSH = "$env:USERPROFILE\.dsh" # 或你的 $DSH_HOME $PROFILE_DIR = "$DSH\profiles\desktop" 1. 打包 cd $REPO pnpm pack --out "$PROFILE_DIR\local-packages\dsh-provider-toggle-0.2.7.tgz" 2. 声明 —— package.json 写精确版本,tarball 写进 pnpm-workspace.yaml 的 overrides package.json "dsh-provider-toggle": "0.2.7" + dsh.profile.bundles 里加 "dsh-provider-toggle" pnpm-workspace.yaml overrides: dsh-provider-toggle: file:local-packages/dsh-provider-toggle-0.2.7.tgz 3. 安装,然后校验 cd $PROFILE_DIR CI=true pnpm install --no-frozen-lockfile CI=true pnpm install --frozen-lockfile 再跑一遍你 DSH home 自带的只读安装门禁 然后重启应用。这道门禁就是标准的本地插件安装检查 —— 改前只读校验、精确版本 + workspace override、改后同样门禁 + frozen 安装。 自测 node tests/run.mjs # 77 项 —— 插件本身 node tests/uninstall.test.mjs # 32 项 —— 卸载工具端到端 node tests/desensitize.test.mjs # 12 项 —— 脱敏门禁 npm test # 三套连跑 tests/uninstall.test.mjs 会读取活动 profile patch (默认 %USERPROFILE%\.dsh\profiles\desktop\cordis.patch.yml);把 DSH_PROFILE_DIR 指向别处即可校验另一个档。它的 scratch 目录建在系统临时根下,因此跑测试永远不会写进你自己保留的目录。 除 node_modules/ 下随仓库携带的 schemastery 之外没有依赖,它用于校验宿主半边的 Config。 tests/run.mjs 在 vm 里配一个 window.__ModuleLoader__ 壳来求值 client.js(于是语法错误或顶层 TDZ 会在这里失败,而不是把设置页整个搞白),对两个槽位做浅渲染,并在一个内存版设置文档上端到端驱动开关协议 —— 该文档模拟了宿主的 revision 栅栏与 path-op 语义。 tests/uninstall.test.mjs 在 scratch 目录里对真实 profile patch 的一份副本跑维护工具 —— 从不碰活动 profile —— 并断言移除插件那段之后文档逐字节相同。 卸载 / 回滚 1. 在「模型」页页脚把每个已存档供应商都启用(否则工具会拒绝执行)。 2. 先看计划,再从 profile patch 里移除插件的设置段: node tools/uninstall.mjs node tools/uninstall.mjs --execute 3. 从 profile 的依赖列表里移除该包(命令由工具打印)。 tools/uninstall.mjs 默认是 dry run,除非传入 --execute;写之前会连同字节数与 SHA-256 一起备份;存档里还有供应商时会拒绝执行 —— 卸载永远不会悄悄丢掉某个供应商的配置。 那份备份同时就是回滚件:把它拷回 cordis.patch.yml 覆盖,然后重启。 已知限制 - 只针对 llm-pi-ai。 DeepSeek Account 与 DeepSeek 行是官方内置段,「停用官方路由」语义不同,不在范围内。 - 开关位于行的末端、行头下方。 官方页面把这个扩展槽位渲染成行内操作按钮的兄弟节点,所以开关无法插到 编辑/删除 之间。没有修改任何官方包。 - 已经绑定到被停用供应商的会话会保持绑定。 只有默认模型被守卫;已经选中该路由的会话在下一次请求时会失败,直到它切换为止。这正是默认模型守卫是硬阻断的原因。 - 存档是部署配置,不是密钥库。 只暂存 profile 配置;API key 留在凭据服务的 <ROUTE>_API_KEY 下,插件从不读取也从不写入。 目录结构 index.js 宿主半边 —— Config 里 volatile 的 disabled 字段就是存档 client.js 浏览器半边 —— 两个槽位与开关协议 cordis.patch.yml bundle patch —— 插入 provider-toggle 行(id == 设置 namespace) locale/ 插件管理器显示文案(en / zh) tests/run.mjs 执行门禁 —— 两半真跑,77 项 tests/uninstall.test.mjs 卸载工具端到端 —— 32 项 tools/uninstall.mjs 卸载辅助工具 docs/images/ README 截图 致谢 写入路径协议(先存档后 unset 的顺序、先恢复后清空的顺序、拒绝分类,以及重命名后按 schema 形状找回存档行的兜底)参照了 dsh-web 包里的 @linxin666/dsh-client-ui-model-capabilities —— 它在 Apache-2.0 下针对 0.2.0-rc.2 发布了同一处缝。本包是一个独立且小得多的实现:一个开关加一个存档,没有逐模型能力编辑器。 dpt-switch / dpt-thumb 规则是 @deepseek-ai/dsh-client-ui-primitives 的 Switch.module.css 改名后的一份拷贝;该行的字号、间距与令牌取自 dsh-client-ui-settings-models 编译产物 ModelsSection.module.css —— 两者都是 DSH 自己的设计系统,所以插件与它所在的那一页保持一致,而不是去近似它。插件在运行期仍然不 import 这两个包(practices.md:自己写控件并贴合宿主才是被支持的路径)。 许可证 MIT。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
dunlingzi/dsh-provider-toggle
在模型设置页开关供应商,停用即移除路由并自动存档
相关插件 · 模型接入
API 中继安全审计toby-bridges/api-relay-audit
面向 AI API 中转与 LLM 代理的本地安全审计。
★ 897已汉化DSH
69.4
免费搜索插件DDDMUC/dsh-free-search
DeepSeek Harness 免费搜索插件 —— 无需 API key,零成本,多引擎可切换。 一个给…
★ 761已汉化DSH
68.7
免费联网搜索liustack/modsearch
在官方 App 里模型能联网,切到 API 就不能了。ModSearch 把联网补回来:网页搜索、X…
★ 863已汉化DSH
68.5
OpenCode 免费模型FishBottle7/opencode2dsh
在 DSHDeepSeek Harness里原生使用 OpenCode Zen 的免费匿名模型。
★ 379已汉化DSH
67.8
AI 模型网关tingly-dev/tingly-box
Tingly Box Web UI 演示
★ 373已汉化DSH
67.4
WorkBuddy 账号池XDTrees/dsh-xdpool
把你能白嫖的模型额度接进 DSH 同一个池:WorkBuddy 多账号自动容错、十三家扫码登录、76…
★ 359已汉化DSH
67.1