dsh-team-progress: Gaining Visibility into Four Panels of an Agent Team with Durable State

前言

在 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
羽毛球分组比赛记分
小程序二维码

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

Xiaoye