dsh-team-progress:用 durable state 看清 agent team 的四塊面板

前言

在 DeepSeek Harness 裏跑多成員 agent team 時,任務認領、缺陷臺賬、goal 輪次和「現在該人介入什麼」往往分散在不同服務與日誌裏。模型側工具能改狀態,但 GUI 若只展示佔位數字,讀不到的來源還會顯示 0,容易誤判團隊是否在推進。dsh-team-progress 是社區維護的客戶端插件,把上述信息收成會話內一個 Team progress 標籤頁,數字來自可覈對的 durable state;讀不到的數據則顯示 unavailable 及原因,而不是假零。

這是什麼

插件全名 dsh-team-progress,維護者爲 ucfjoe,在 SkillHub 插件目錄 中歸類爲客戶端。當前 package 版本爲 0.6.0(MIT)。它不改變 DSH 核心調度邏輯,而是在 host 側註冊一條 loopback JSON 路由,在 web 客戶端註冊面板,約每 5 秒拉取一次狀態並渲染四個視圖加優先展示的待辦動作列表。

核心功能

下面介紹面板裏每一塊對應什麼、數據從哪來。

四個視圖與「先做決策」的動作區

README 中的面板示意把 STALLED / BLOCKED 放在最前:stall 是唯一明確需要人做決定的態。其餘三塊依次爲:

  1. MEMBERS — 每個成員一行:live status、認領的共享 task、該 task 的狀態;未認領則顯示 no claimed task。
  2. DEFECTS — 按狀態統計已配置的 defect log,並列出仍 open 的行;識別 open / in flight / fixed / closed as superseded,其餘計入 other 並在 UI 中顯示爲 unclassified。
  3. GOAL — 相對 cap 已開始的 round 數、階段,以及 armed / disarmed。
  4. STALLED / BLOCKED — 例如成員 inactive 導致 STALLED,或 task 等待前置 task 的 BLOCKED。

標題行還會彙總任務與成員進度(如 3/6 tasks · 2/3 members)及進度條,具體字段以 RPC 返回的 live payload 爲準。

一條 RPC、兩種方法

Host 半部(lib/index.js)在 webServer 服務上註冊:

POST /api/team-progress/rpc

客戶端半部(lib/client.js)在面板打開期間約每 5 秒請求一次。讀取狀態使用:

{ "method": "state" }

面板通過 conversation.view 註冊爲 id team-progress、order 30 的會話標籤 Team progress,綁定打開它的那個 session;mount() 裏的註冊即渲染範圍的權威來源,不會額外註冊別的 UI。

可選的 act 方法提供 complete / reopen / claim / release / reassign、wake、interrupt、spawn、auto-assign、broadcast、member cap 等操作面,與模型工具調用的 domain 方法同源;默認關閉,見下文配置與安全說明。

讀不到來源時的行爲

簡介與 README 一致:凡插件無法讀取的數據源,界面顯示 unavailable 並附帶原因,而不是顯示 0。例如未配置 defectLogs 時,缺陷視圖會報告 unavailable: no defect-log paths are configured。

安裝與啓用

該包在 package.json 中聲明 "private": true,沒有 dsh plugin add github:… 一類的一行安裝命令;啓用需要在 profile 裏解析本地包並改 patch。官方 README 給出三步。

1. 將 checkout 鏈入 profile 的依賴

profile 從自身的 package.json 解析插件包;README 示例使用 clone 後 link: 依賴(維護者曾在 pnpm 11.22.0 / Node v26.7.0 下驗證 symlink 與 import('dsh-team-progress')):

git clone https://github.com/ucfjoe/dsh-team-progress.git ~/dsh-team-progress

PROFILE=~/.dsh/profiles/desktop          # 你實際使用的 profile
# 在 "$PROFILE/package.json" 的 dependencies 中增加:
#   "dsh-team-progress": "link:$HOME/dsh-team-progress"
cd "$PROFILE" && pnpm install
ls -l node_modules/dsh-team-progress     # 應爲指向 checkout 的 symlink

2. 在 profile 的 cordis.patch.yml 插入插件行

倉庫自帶的 cordis.patch.yml 只有 bundle 自描述,不會單獨啓用插件;必須在 profile 裏插入並帶上配置,例如:

- id: team-progress
  name: 'dsh-team-progress'
  config:
    defectLogs:
      - ~/repos/your-project/docs/defects.md
    allowMutations: false

defectLogs 中的 ~ 會展開,空項會被忽略。

3. Reload

修改 host 半部後僅改文件不夠:模塊在 app 進程內以 ESM 加載,需禁用再啓用插件以重新 import 並重建 client bundle(開發日誌 docs/DEVLOG.md 有記錄)。

典型用法

只讀觀察團隊狀態

啓用插件且 allowMutations 保持默認 false 時,打開會話中的 Team progress 標籤即可。面板會自動輪詢 state;你可在瀏覽器側對照 MEMBERS / DEFECTS / GOAL 與 STALLED、BLOCKED 列表判斷是否要介入。

配置缺陷 Markdown 表

在 defectLogs 中指向含標準表頭的 markdown 文件。表頭需含 Status 列,以及 Defect / Issue / Problem / Bug 之一,並緊跟分隔行,例如:

| # | Defect | Evidence | Status |
|---|---|---|---|
| 2 | Repo→app mapping is dead code. | investigate.py:319-321 | **open** |
| 17 | False CRITICAL. | run.log | **fixed** #222 — merged |

狀態單元格會在首個 , ; : 等分隔符處截斷,因此 **fixed #222** — merged 仍解析爲 fixed。

可選:打開 act 寫操作

將 allowMutations 設爲 true 後,同一 RPC 路由可處理 act。可用 actionPolicy: 'read-write' withhold 會長期生效的 spawn 與 member-limit(返回 403 TEAM_PROGRESS_ACTION_WITHHELD);關閉 mutations 時 act 返回 403 TEAM_PROGRESS_ACTIONS_DISABLED,各視圖仍可讀。

常用配置默認值(均可選)摘錄如下:

key default 作用
defectLogs [] 缺陷 markdown 路徑列表
allowMutations false 是否啓用 act
actionPolicy 'all' mutations 開啓時的動作範圍
aliasFile ~/.dsh/team-progress/aliases.json 成員展示別名等
homePatchFile ~/.dsh/cordis.patch.yml member-limit 動作編輯的 patch 層

完整表見 GitHub README。

適用場景與注意

適合誰: 在 DSH 里長期跑 agent team、需要 GUI 裏一眼看到「誰在做什麼、缺陷臺賬、goal 輪次、何處 stall/block」的開發者;希望數字與 durable state 一致、且明確區分「無數據」與「讀失敗」時,該插件的設計目標與之一致。

環境與依賴: README 記載讀路徑曾在 DeepSeek Harness 0.2.1-rc.3(2026-10-24)上追蹤,端到端最後在 0.2.1-rc.5(2026-11-03)驗證 POST /api/team-progress/rpc 帶 {"method":"state"} 返回 200;未聲明最低版本。客戶端聲明 dsh.client.platform 爲 web,在 Node 中 import 'dsh-team-progress/client' 會因 window is not defined 失敗,屬平臺劃分而非缺陷。硬注入僅 webServer;agents、agentTeams、goals 等 bundle 若被 profile 關閉,面板仍可加載並報告對應來源狀態。

安全: 插件以當前 DSH 進程權限運行;啓用 allowMutations 前應在源碼中核對 act 會觸達的 domain 方法。安裝與升級前請閱讀倉庫許可證(MIT)及 Security 一節對 action surface 的說明。

SkillHub 目錄頁與 GitHub 倉庫爲社區生態條目,與 DeepSeek / 幻方無官方從屬關係;星標等元數據以各站點當時展示爲準(資料中 GitHub 3 stars)。

結尾

經過上面的步驟,dsh-team-progress 把 agent team 的運行態收成會話內一個 honest readout:四塊視圖、優先展示的 stall/block,以及可選、默認關閉的寫操作面。進一步細節與 defect 解析規則見倉庫 README。

  • 目錄頁:https://www.skillhub.cn/plugins/ucfjoe/dsh-team-progress
  • 源碼與文檔:https://github.com/ucfjoe/dsh-team-progress
羽毛球分组比赛记分
小程序二维码

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

小夜