dsh-superpowers:爲每個 Superpowers 技能單獨指定子代理模型

前言

團隊裏用 DSH 跑 Superpowers(spec-driven development)這類重度技能化的方法論時,通常會碰到一個樸素問題:preset 裏每個技能本質都是一次子代理派發,但在默認 harness 下,這些子代理都跑在父會話選中的那個模型上。想在調試這類重任務上用大模型、在寫測試這類輕任務上用便宜模型,沒有一等公民的配置入口,只能自己在技能裏寫死或手動改。

goodjin/dsh-superpowers 就是針對這個痛點做的插件。它把 Superpowers 打包成一個 DSH agent preset,同時在 Settings 裏提供一套「每個技能一個下拉框」的模型路由表,派發哪個技能,子代理就用哪套 provider/model。下面介紹它的能力、安裝方式和配置入口。

這是什麼

一句話定位:一個全局插件加上一個可選 preset,把 Superpowers 的 15 個技能和對應 persona 帶進 DSH,並按技能粒度指定子代理模型。維護者是 goodjin,屬於工作流分類。它解決的不是「Superpowers 怎麼寫」,而是「Superpowers 的各個技能該用哪個模型、由誰來決定」。

核心功能

插件分成兩半:全局的 plugin 負責 Settings 分區、模型表、工具模塊和自檢;preset 負責可選的運行模式,包含技能、persona 與工具行。安裝一次即可在 preset 選擇器裏看到 Superpowers。功能包括:

  • 隨包提供 Superpowers 的 15 個技能,以及讓 agent 真正按六階段方法執行的 persona。
  • Settings → Superpowers 分區:每個技能一行,另有「其他子代理」行,覆蓋未綁定技能的派發。
  • 統一的派發工具 delegate_skill:讀取模型表,把子代理啓動在對應模型上,並把子會話命名爲技能名。
  • 子代理的 composer 上會只讀地顯示它實際運行的模型。
  • 宿主行(host row)按構造方式容錯:即使插件完全失敗,DSH 也能正常啓動並保持可用。

模型解析順序是:先取技能自身的 pin,再取「其他子代理」行的默認 provider/model,都沒有就繼承父會話的路由。技能行上的「跟隨默認」會清掉該技能的 pin,但與「複用主會話模型」不是一回事——後者即使配置了默認 pair 也會被尊重,它存成一個 sentinel 並省略 agentOptions,使子代理沿用父會話模型。

安裝與啓用

該包不在 npm 上,直接從倉庫安裝:

dsh plugin --profile web add goodjin/dsh-superpowers

安裝完成後,preset 選擇器裏會出現 Superpowers。需要把它設爲默認 preset 時,配置如下:

agent-presets:
  default: superpowers

否則只在 UI 的 preset 選擇器裏手動選擇即可。

在 DSH 0.2.x 上,preset 作爲聲明行隨包一起發佈,因此裝完即用;舊版本從 ~/.dsh/.agent-presets/superpowers/ 讀取,0.2.x 沒有這個目錄。升級時重跑同一條安裝命令即可,plugin 半與 preset 半會一起更新,不存在需要手動同步的複製目錄。

配置模型路由

打開 Settings → Superpowers,每個技能一行,選項在下一次派發時讀取,無需重啓,也不需要改 preset。路由存在 profile patch 的 superpowers-delegation-settings loader 行裏(DSH 0.2.x 的插件配置放在這裏,而不是 settings.yaml),因此也可以直接改 cordis.patch.yml:

- id: superpowers-delegation-settings
  name: "@goodjin2/dsh-superpowers"
  config:
    defaultProvider: minimax-cn
    defaultModel: MiniMax-M3.1-Flash-Preview
    skillModels:
      verification-before-completion:
        provider: xiaomi-token-plan-cn
        model: mimo-v2.6-pro

升級前寫在 settings.yaml 裏的值會在首次啓動時自動遷移,遷移只填充尚未設置的字段,不會覆蓋之後的手改。

驗證安裝

裝完或升級後建議跑一條自檢:

node ~/.dsh/profiles/web/node_modules/@goodjin2/dsh-superpowers/scripts/check.mjs 3080 <token>

token 來自打開 DSH 時所用的 URL,每次重啓都會變化。檢查會逐項報告插件對宿主側各項依賴的探測結果。關鍵行是 route.exists:它直接向瀏覽器通道發 POST。當宿主半靜默註冊失敗時(即 v0.2.1 修復的那個 bug),路由行看起來仍是 active,日誌裏也沒有輸出,只有這條探測能看到 404,因此不要跳過它。若檢查報告失敗,條目名會指出是哪個依賴發生了遷移。

升級與兼容性

DSH 沒有 per-plugin 版本鎖定,插件在啓動時從 profile 解析。若某次 DSH 升級移動了內部 API,不會產生報錯——服務照常啓動,功能卻悄悄失效。這正是該插件設計上要能承受、而不是要杜絕的失效模式。

支持的 DSH 版本爲 >=0.1.5-rc.2 <0.3.0(在 peerDependencies 的 @deepseek-ai/dsh-tools 中聲明)。超出該範圍時,Desktop 插件面板會標記不兼容並阻止激活。其餘三項保護:

  • 宿主行被包裹,無法阻止 DSH 啓動。故障注入驗證過:即使該行拋異常,DSH 仍能啓動,54 個 client entries 照常掛載,插件降級爲「不提供 per-skill pins」。
  • Settings 的 Superpowers 分區頂部顯示自檢行,依賴齊全時爲綠色,否則爲紅色並逐項說明原因。
  • 客戶端失敗由宿主插件加載器按條目隔離,某條 client 出錯只會顯示 banner,其餘 UI 仍可用。

目錄結構

lib/index.js             # 宿主行:settings 命名空間、瀏覽器通道、自檢端點
lib/client.js            # 瀏覽器行:Settings 分區、composer 模型標籤
lib/skill-delegation.js  # delegate_skill 工具
lib/settings-schema.js   # 存儲的 settings 形狀與路由解析
cordis.patch.yml         # 插件新增的兩條 composition rows
preset/                  # agent preset 與 15 個 Superpowers 技能
scripts/check.mjs        # 升級後兼容性檢查
scripts/test.mjs         # 加載安全性與降級測試

適用場景與注意

適合已經採用或打算採用 Superpowers 六階段方法、且希望按技能區分模型成本與能力的 DSH 工作流使用者。需要注意,插件以當前 dsh 進程的權限運行,安裝前建議先閱讀源碼與許可證。內置技能來自 obra/superpowers,兩者均爲 MIT,倉庫內的 THIRD_PARTY_NOTICES.md 有說明。受支持的 DSH 版本範圍有限,升級 DSH 後請先運行 check.mjs,而不是等到功能靜默失效再排查。

小結

這個插件的價值不在多,而在把一個細但真實的需求做好:讓 Superpowers 的 15 個技能各自跑在合適的模型上,同時保證插件自身失敗不會拖垮 DSH。目錄頁見 https://www.skillhub.cn/plugins/goodjin/dsh-superpowers ,源碼見 https://github.com/goodjin/dsh-superpowers 。

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

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

小夜