用 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

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

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

小夜