用 dsh-builtin-toggles 给 DeepSeek Harness Web 装上内置能力检查器

前言

DeepSeek Harness(dsh)把模型适配、工具、会话、沙箱和界面都做成插件,官方仓库的口号就是「Everything is a plugin」。Web 界面里真正跑着哪些内置能力、哪些被 profile 覆盖、哪些只是当前会话的 Agent 预设,平时并不好一眼看清。社区里也已经出现了若干「插件开关板」,但它们管的是用户安装的第三方插件生命周期,并不会按证据去审阅官方内置项。

dsh-builtin-toggles 走的是另一条路:先做检查器,再给 9 个已经审阅过的界面控件提供极窄、fail-closed 的开关。本文按社区目录页、GitHub 仓库 README、Inspection API 文档和 npm 页面交叉核对后整理:它是什么、能看什么、怎么装、怎么用,以及明确不能做什么。

需要先说清楚两件事。第一,DeepSeek Harness 目前仍是 developer preview,官方 README 写明会有破坏性变更。第二,deepseek-harness-plugin.com 是独立的社区目录,和 DeepSeek / 幻方没有官方从属关系,不能当成官方应用商店。

这是什么

dsh-builtin-toggles 是一款面向 DeepSeek Harness Web 的界面增强插件,产品名是 Evidence-backed Built-in Capability Inspector。GitHub 仓库由 Starfie1d1272 维护,npm 包名同样是 dsh-builtin-toggles,当前版本 0.3.2,许可证 MIT。仓库 README 明确写了:这是非官方社区插件,与 DeepSeek Harness 官方无关,也不受官方支持。

它解决的问题可以收成一句:把当前 Web Loader 里的内置 capability 摊开给你看,并只允许改那 9 个已审阅的纯界面开关。

社区目录把它分在「界面增强」,收录页简介是「基于 evidence 的 DeepSeek Harness Web 内置能力检查器」。GitHub API 在 2026-08-17 显示仓库 7 星;目录页当时仍显示 5 星,星标以 GitHub 一手数据为准。主要语言是 TypeScript,只挂 web profile。

它不是通用插件管理器,也不提供 marketplace,不会安装、更新或删除第三方插件。同类名字的 dsh-plugin-toggle 管的是已加载插件的启停,和这份检查器不是同一个东西。

核心功能

Capability Inspector

装好之后,入口在 设置 → 插件 → 内置插件(仓库 README 当前文案;社区目录简介仍写成「内置开关」,界面以仓库为准)。

页面展示的是 Host 生成的 capability inspection,不是浏览器自己猜出来的状态。每一项可以看到:

  • 运行状态
  • profile override 三态(继承 / 强制启用 / 强制停用)
  • Agent 预设归属
  • composition scope(Host 组合,或按会话挂载的 Agent 预设组合)
  • 审阅溯源、依赖证据
  • 兼容性
  • 服务端计算的 mutation eligibility(是否允许改配置)

检查范围包括 external、未审阅和异常条目。筛选可以按 ID/包名、类别、管理平面、组合范围、策略、验证、运行状态和异常来做。需要对外贴日志时,页面提供一份脱敏诊断报告,不含本地路径和配置内容;复制成功或失败会显示在按钮旁。

0.3.2 对中文文案做了对齐:没有结构漂移时,Doctor 摘要写「未发现结构漂移」,而不是把「运行时身份不可用」当成默认健康状态。Host 目前不公开稳定的 runtime release identity,Compatibility 会如实显示 unverified,插件不会从模块路径或私有字段去猜版本。

组合范围:Host 和 Agent 预设分开算

同一份 Loader 里,Host/profile 组合和按会话挂载的 Agent 预设组合可以共用一个裸 ID,例如 tool-bash。检查器按 Loader 公开的 Entry.id(含 tree-owner 链)区分 scope,不会把这种合法共存误判成 duplicate_runtime_id。同一 scope 里真的撞 ID,才会标成 drifted 并 fail-closed。

tool-*plan-mode 这类按会话由 Agent 预设组装的条目会单独标注。服务端直接把它们锁住:policy=locked(原因 agent-preset),mutationEligibility=ineligible。它们不会借用同名 Host 行的可管理性,也不会变成 Web profile 里能改的项。

9 个已审阅的界面开关

开关只覆盖下面 9 个 ID,全部是纯界面 leaf,作用在 web profile 上,会影响全部 Web 会话,但不会去改 Agent 预设:

  • ui-deliverables
  • ui-jobs
  • ui-goal
  • ui-message-feedback
  • ui-model-selection
  • ui-agent-preset
  • ui-skill
  • ui-subagent
  • ui-trajectory

可管理名单写在 src/policy.tsMANAGEABLE_IDS 里。强制开/关会更新 Host 并持久化;「恢复继承」只删掉本插件写下的顶层字面量 disabled override,下层值交给 DSH 的 profile / HMR 重组。

核心服务、Agent 能力、第三方和未知条目一律锁定。没有 generic plugin manager,也没有安装/更新生命周期。

Inspection API v1

机器接口是只读的:

GET /api/builtin-toggles/v1/inspection

响应使用 schemaVersion: "builtin-toggles.inspection/v1",不含本地化文案,提供 inventory、审阅基线、配置三态、compatibility 和 eligibility。loopback 和显式 trusted host 都能读;改配置的 POST 额外要求 loopback same-origin。trustedHosts 只用于防 DNS rebinding,不是认证。远程打开 Inspector 时是只读的。

安装与启用

前置条件:已经初始化过 DSH 的 web profile。插件当前审阅过的基线是 published @deepseek-ai/dsh-base@0.1.0-rc.6@deepseek-ai/dsh-web-app@0.1.0-rc.6,不是 >= rc.6 这种版本范围承诺。后续公开版本也许仍能装、能跑,但未经明确 review 前,不自动变成 supported baseline。package.json 要求 Node.js ^22.19.0 || >=24.0.0

社区目录页给出的安装命令是:

dsh plugin add github:Starfie1d1272/dsh-builtin-toggles

目录页同时提醒:如需可复现安装,应固定 commit 哈希,写法是 github:Starfie1d1272/dsh-builtin-toggles#<commit>。不要把 #commit 三个字原样贴进去,把 <commit> 换成仓库里真实的哈希。

仓库 README 写的是按 npm 包名装进 web profile,和目录页的 GitHub 源是两条已公开路径:

dsh plugin --profile web add dsh-builtin-toggles
dsh web

没有全局 dsh CLI 时,可以用:

npx @deepseek-ai/dsh plugin --profile web add dsh-builtin-toggles
npx @deepseek-ai/dsh web

安装后需要重启 DSH web / gateway,让启动过程读到 bundle 层。发行方建议把版本 pin 死,不要随上游自动漂移。

目录页和仓库都写了同一条安全提示:插件以当前 dsh 进程的权限运行,安装时可能执行代码。 装之前应检查源代码仓库和许可证。

卸载:

dsh plugin --profile web remove dsh-builtin-toggles

或:

npx @deepseek-ai/dsh plugin --profile web remove dsh-builtin-toggles

然后重启。插件不会擅自删除用户 profile 内容。如果曾经对那 9 个控件做过强制开/关,卸载前应先执行「恢复继承」,只清掉自己写下的顶层 disabled override。

典型用法

下面步骤都来自仓库 README 和 Inspection API 文档,可以按原样做。

  1. 确认 web profile 已初始化,按上一节装好插件并重启。
  2. 打开 DeepSeek Harness Web,进入 设置 → 插件 → 内置插件
  3. 先看 Doctor / Inspector 总览:有没有结构漂移、异常项、profile 不可写。干净的 rc.6 + 内置 standard Agent 预设下,仓库截图展示「仅异常项」为 0;Compatibility 在缺少 runtime identity 时仍会是 unverified,这是预期行为,不是装坏了。
  4. 用筛选器缩小范围。Host 行和 Agent 预设行即使 ID 相同也会分开展示,不要把预设行上的锁定当成故障。
  5. 只对上述 9 个 UI 控件做开关。API 接受的动作是 force-enableforce-disablerestore-inheritance。成功后,强制类动作的 runtimeEffectapplied;恢复继承是 recomposing,表示 profile 已提交,运行时还要等 DSH 的 watcher 重组,不保证已经打开的页面同步收敛。页面随后会重新拉取 inspection。
  6. 需要把现场状态发给别人时,用页面上的脱敏诊断复制,不要直接贴本地路径或 profile 原文。

需要机器读这份清单时,在 loopback 下请求:

curl -sS http://127.0.0.1:3080/api/builtin-toggles/v1/inspection

3080 是官方 dsh web 的默认端口;如果你改过绑定地址,换成实际 origin。远程 trusted host 可以读,但不能 POST 改配置。

适用场景与注意事项

适合这几类人:

  • 在 DSH Web 上排查「这个内置控件到底开没开、是 profile 覆盖还是 Agent 预设」
  • 发行版或集成方需要一份可机读的 capability inventory,对接 Inspection API v1
  • 只想关掉少数几个已审阅的界面模块,而不想碰核心服务和工具

不适合、也不该指望它做的事:

  • 管理第三方插件的安装、更新、删除
  • 编辑 Agent 预设,或把预设里的 tool-* 当成 Web profile 开关
  • 把 Compatibility unverified 理解成「当前环境已经官方认证」
  • 在非 web profile、或未审阅的上游版本上,把 9 个开关当成稳定支持面

再强调一遍安全边界:可管理性只来自服务端 allowlist,浏览器不是授权边界;每次 POST 都会重新校验名单、包身份、self protection、eligibility 和 profile writer。插件以当前 dsh 进程权限运行,安装前请自己看源码和 MIT 许可证。

小结

dsh-builtin-toggles 把 DeepSeek Harness Web 的内置能力摊成一张有证据的检查表,真正能拨动的只有 9 个已审阅的界面开关。它刻意做窄、做 fail-closed,所以不会变成又一块插件市场。

目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-builtin-toggles/

GitHub:https://github.com/Starfie1d1272/dsh-builtin-toggles

npm:https://www.npmjs.com/package/dsh-builtin-toggles

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜