dsh-supervisor:爲 DSH 智能體增加監督層

前言

DeepSeek Harness(DSH)能派發任務、收回結果,但在多 agent、子代理並行時, orchestrator 往往還要單獨記:某個 teammate 是否正在受控、補發指令該走哪條通道、以及「這個 agent 此刻在幹什麼」這類只有主會話才掌握的上文。換會話或換機器後,這些狀態也很難對齊任務板與子會話轉錄。

下面介紹社區插件 dsh-supervisor(維護者 YuanKunlin,目錄分類:工作流)。它在不自建 agent 註冊表的前提下,複用 DSH 已有的 Agent Teams 與 continuable 子代理數據源,提供按人開關、排隊收件箱和監督方撰寫的 brief,補齊上述三塊缺口。

這是什麼

dsh-supervisor 是面向 DSH Web 運行的監督層插件:每個可監督 agent 有獨立開關、可攢可發的指令隊列,以及僅監督方通過 supervise 工具寫入的 intro 介紹字段。它與 Agent Teams 成員和普通 continuable 子代理兼容,因爲成員列表與投遞能力均來自宿主已有的 ctx.agentTeams 與 ctx.subagents,而非插件自造名單。

源碼與說明見 GitHub,社區目錄頁:skillhub.cn/plugins/YuanKunlin/dsh-supervisor。許可證 MIT;package.json 標明當前包版本 0.3.1,運行時零 npm 依賴,Node >=20。

核心功能

逐個 agent 的監督開關

關掉開關時:保留全部記錄,隊列暫存、不投遞;重新打開後按原順序補發。新發現的 agent 是否默認開啓由配置項 defaultSupervise 控制(默認 false,需顯式 toggle 或面板操作纔開監聽)。

排隊收件箱

一個輸入路徑即可排任務:開關開着立即投遞,關着則攢在隊列裏。子代理投遞方式由 delivery 配置:queue 排到下一輪(默認,更可預測);steer 插到最近一步(語義由 DSH 決定,不保證被採納)。

監督方 brief(intro)

intro 只能由監督方(通常是主 agent)通過 supervise 工具的 intro action 寫入,用於在面板上說明該 agent 在做什麼。還可 request_intro 標記「等介紹」,面板顯示待辦。

界面與無側邊欄降級

安裝 dsh-better-sidebar 時,Web 右側欄會出現「監督」頁籤(開關、介紹、隊列、已投遞歷史)。未裝該軟依賴時插件仍會加載路由與 supervise 工具,僅缺側邊欄(啓動時 warn);也可用 POST /supervisor/api 或由模型全權代勞。

數據來源與可監督對象

類型 可投遞 說明
Team teammate 是 走 ctx.agentTeams.sendMessage
continuable 子代理 是 走 ctx.subagents.prompt
one-shot / external 否 面板只讀,無輸入框
Lead 自身 — 不出現在列表

開關、隊列、介紹、歷史落在 $DSH_HOME/supervisor/state.json(可通過 statePath 覆蓋);團隊成員與子代理目錄每次現讀宿主 API,面板與任務板不一致的情況應避免出現。

安裝與啓用

任選一種方式安裝(裝完需重啓 dsh web):

# 1. git(推薦:換機器也能裝)
dsh plugin --profile web add "github:<owner>/dsh-supervisor"

# 2. 本地目錄(開發調試)
dsh plugin --profile web add /path/to/dsh-supervisor

# 3. 打包後分發(README 示例文件名含 0.2.0,以你本地 pack 產物爲準)
npm pack
dsh plugin --profile web add ./dsh-supervisor-0.2.0.tgz

將 <owner> 換爲倉庫所有者(如 YuanKunlin)即可對應本插件。本包無 prepare / build / postinstall,git 安裝不會觸發 pnpm 的 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED。

在 profile 的 cordis.patch.yml 中可覆蓋配置,例如:

- id: supervisor
  config:
    enabled: true
    defaultSupervise: false
    pollIntervalMs: 4000
    historyLimit: 20
    delivery: queue        # queue | steer
    statePath: null        # null => $DSH_HOME/supervisor/state.json

非法配置值會回落默認,不會讓 profile 無法啓動。

典型用法

模型側:supervise 工具

監督方通過宿主註冊的 supervise 工具操作狀態:

action 主要參數 說明
list — 列出 agent、開關、隊列深度、是否已有介紹
toggle agent, supervise 開關;打開時自動補發隊列
queue agent, text 排一條任務
intro agent, text 寫入介紹
request_intro agent 標記待寫介紹
forget agent 清除本插件記錄(不刪除 agent 本身)

agent 可傳 id,也可傳名字/標籤(大小寫不敏感)。

HTTP:POST /supervisor/api

sessionId 可爲當前可見的任意會話,宿主會上溯到根會話。示例:

{ "op": "list",          "sessionId": "..." }
{ "op": "toggle",        "sessionId": "...", "agentId": "...", "supervise": true }
{ "op": "queue",         "sessionId": "...", "agentId": "...", "text": "..." }

除 list 外多數操作返回完整快照;業務失敗仍爲 HTTP 200 且 {"ok": false, "message": ...}。

面板上的操作流

1、在監督列表中找到目標 agent(如 teammate builder),打開「監督」開關。
2、在 intro 中寫入 orchestrator 掌握的上下文(例如已完成哪些目錄、下一步應給具體路徑而非模糊目標)。
3、在輸入框排隊指令;若開關開啓則立即投遞,否則入隊待補發。
4、通過「已投遞」與 historyLimit 內的歷史回顧最近指令,需要徹底重置可刪除 state.json。

適用場景與注意

適合誰: 使用 DSH Agent Teams 或多層 continuable 子代理、需要主會話統一「暫停監聽 / 批量補發 / 寫 brief / 旁路排任務」的開發者。README 標明目標 DSH 版本爲 0.2.x(已驗證);0.1.x 未驗證。

運行與安全: 插件以當前 dsh 進程權限運行;POST /supervisor/api 路由無鑑權,僅監聽迴環且依賴 sessionId 解析在線會話,同機任意進程理論上可調用。安裝前請自行審閱源碼與 MIT 許可證。面板按 pollIntervalMs 輪詢,不是推送;也不展示完整對話,細看內容請用 DSH 子會話轉錄。

兼容性降級: 依賴宿主 webServer(必需)及 agents、subagents、agentTeams、tools 等服務的可用性;缺服務時對應功能降級,不阻止插件加載。

社區插件目錄(如 SkillHub)獨立於 DeepSeek / 幻方,並非官方應用商店;生態上 DSH 奉行「一切皆插件」,本倉庫當前 GitHub 星標爲 0(以目錄頁展示爲準)。

結尾

經過上面的步驟,你可以在不動 DSH 核心派發模型的前提下,爲每個 agent 加上可開關的監聽、可攢可發的隊列,以及只由監督方維護的 context brief。進一步細節與 54 項離線測試說明見倉庫 README。

  • 目錄頁:https://www.skillhub.cn/plugins/YuanKunlin/dsh-supervisor
  • GitHub:https://github.com/YuanKunlin/dsh-supervisor
羽毛球分组比赛记分
小程序二维码

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

小夜