dsh-plugin-agent-groups:把多个 live Session 收成协作群

前言

DeepSeek Harness(DSH)里每个会话各自持有上下文、模型路由和工作目录。一项任务若需要多个角色并行推进——例如后端、前端、测试,或采集端与服务端——常见做法是手工在会话间复制结论、把多角色塞进同一会话,或用插入式消息打断正在运行的会话。前一种容易遗漏和乱序,后两种会污染角色上下文或打断工具调用与推理。

下面介绍社区插件 dsh-plugin-agent-groups(维护者 flowfire,分类:工作流)。它把多个已打开的 live Session 组织成协作群:成员保留各自上下文与角色设定,插件只采集每轮结束后的最终输出,按时间线排队再合并投递,不做手工转发,也不向运行中的会话插入消息。

这是什么

一句话定位:DSH 插件,用于多会话协作群——拉多个 live Session 进同一群,在共享时间线上 relay 各成员的最终输出。

SkillHub 是社区插件目录,与 DeepSeek / 幻方无官方从属关系;DSH 生态理念是「一切皆插件」,安装前建议自行查看源码与许可证。

设计概览

组件 职责
群 两个及以上 live Session,加每个成员的群内名字与角色设定
时间线 按序记录成员最终输出、发起者发言和系统事件
投递器 成员空闲时,把未读时间线合并成 digest,通过 agent.followup() 送达
协议注入 通过动态 systemPrompt.section() 注入固定协议与成员角色
面板 全局面板建群与管理;右侧栏 tab 便于群运行期间持续观察

核心功能

事件采集与时间线

插件监听 session/event,只处理群成员的 Session。对 assistant/message 缓存该 (session, turn) 的最后一条非空 text;在 turn/end 时取出缓存文本。加入群之前的历史(seq <= member.joinedSeq)丢弃;仅 text block 进入时间线,tool-call、命令输出和中间过程不会写入。

投递:followup,不打断

追加时间线条目后,按 deliveryDelayMs 防抖调度投递。对每个 active 成员:若 Agent 不存在或 status === running 则跳过;否则合并「seq 大于 member.delivered、且非本人」的未读条目,更新游标后调用 agent.followup(digest),不使用 steer()。成员忙时未读累积,空闲后一次收到合并结果;单份 digest 上限 48000 字符,超出时优先保留最近消息。

协议与关键字

通过 Host 根上下文注册 agent-groups:protocol section,注入群名、成员身份、角色设定、active 成员列表与固定协议(只读)。群结束或成员退出后 section 返回空,不再污染 system prompt。

成员输出若去掉首尾空白后完全等于下列关键字,触发对应行为:

关键字 行为
【静默】 不写入时间线、不转发、不计轮次
【退出会话】 成员转为 exited,可能触发群进入 closing / ended

协议同时禁止「收到」「继续待命」「我在」等无信息量占位输出。

发起者与持久化

时间线下方输入框以固定身份「发起者」写入同一条时间线,复用投递逻辑,不占成员轮次、不计入 maxMessages;群非 active 时不可用。

群状态写入 $DSH_HOME/storages/agent-groups/state.json(未设置 DSH_HOME 时为 ~/.dsh/storages/agent-groups/state.json),采用临时文件加 rename 的原子替换,变更后 120ms 防抖落盘。

安装与启用

要求:

  • DeepSeek Harness 0.2.x
  • Node.js 22.19+ 或 24+

社区标准安装(README 原文):

dsh plugin --profile web add github:flowfire/dsh-plugin-agent-groups

安装后刷新页面,侧边栏应出现「多会话协作群」。插件在当前 DSH 进程权限下运行,与 Host 共用对会话与 Agent 的访问;安装前应阅读仓库源码与 MIT 许可证。

可选配置:在 profile 的 cordis.patch.yml 中覆盖:

- id: agent-groups
  name: dsh-plugin-agent-groups
  config:
    maxMessages: 80        # 每个群允许的成员发言条数,达到后自动暂停
    deliveryDelayMs: 150   # 合并投递的防抖窗口(毫秒)
    storePath: /path/to/state.json
配置项 默认值 说明
maxMessages 80 成员发言上限,10–500;发起者发言不计入
deliveryDelayMs 150 同一窗口内多条消息合并为一次投递
storePath 见上文 群状态文件路径

典型用法

经过上面的安装步骤后,可按 README「快速开始」操作:

  1. 在浏览器中打开至少两个会话(必须是 live Session);
  2. 点击侧边栏「多会话协作群」→「新建群」;
  3. 勾选会话,为每个成员填写群内名字与角色设定;
  4. 选择「创建并开始」,或取消「创建后立即唤醒成员」仅建群;
  5. 群运行后,点击「在右侧栏打开」,避免主面板在任意会话有新活动时被切回对话而打断观察。

创建或添加成员时,只接受空闲且不在任何未结束群的会话;运行中的会话须先停止。一个会话同一时间只能属于一个未结束的群(active / paused / closing)。子会话(header.origin === 'subagent')不会出现在可选列表中。

Host 暴露本地面板用 HTTP 端点(无远程鉴权):

/plugins/dsh-plugin-agent-groups/api

GET 返回 { groups, sessions, defaults, now };POST 接受 { action, ... },action 包括 create、pause、resume、dissolve、delete、rename、updateMember、removeMember、addMember、kickoff、say 等。

适用场景与注意

适合:需要在 DSH 内让多个已打开的 Agent 会话并行工作、又希望彼此只看到对方「轮次结束后的结论」、且不想手工转发或打断正在推理的成员。

务必知晓的限制(来自 README「已知限制」):

  • 只接受当前已打开且处于 idle 的 Session;插件不会自动 resume 未打开的会话。
  • 主面板会在任意会话产生新活动时被 DSH 切回对话;群运行期间建议使用右侧栏。
  • 成员在暂停期间产生的输出不会补记;插件重启后活动群可恢复,但不会重放暂停期间错过的输出。
  • 群状态是进程内状态加 JSON 快照;内存时间线最多保留 2000 条,HTTP 快照最近 500 条,面板轮询渲染最近 300 条。

结尾

dsh-plugin-agent-groups 把多 Session 并行协作从「复制粘贴 + 打断」收束为「时间线 + 空闲时 followup 投递」,成员上下文隔离、输出只取最终 text。需要安装命令与完整协议细节时,以 GitHub README 为准。

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

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

Xiaoye