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

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

Xiaoye