dsh-squad:在一个编排会话里调度跨工作区的 AI Worker 舰队

前言

DeepSeek Harness(DSH)已经可以在任意工作区创建会话、下发提示、取消执行并读取日志。多项目并行时,常见做法是手动开多个会话、自己记「哪个窗口在跑哪个仓库」,任务派完再反复刷日志等结果。这种方式能跑通,但缺少命名、归属关系和「派活—收报告」这一层工具化抽象。

dsh-squad 是社区插件 nilesh32236/dsh-squad(npm 包名 @nilesh32236/dsh-squad),维护者为 nilesh32236。它在一个编排(Orchestrator)会话里创建并协调运行在其他工作区里的 Worker 会话:你主要和编排者对话,由它向各 Worker 排队或注入任务,在后台监视进度,收集报告,并处理 Worker 的上报与升级请求。

这是什么

一句话:dsh-squad 为 DSH 补上「命名 Worker、记住编排者归属、把跨项目派活变成工具调用」这一层。

数据流可以概括为:用户 → 编排者 → 多个 Worker(各自在不同项目目录)→ Worker 通过 squad_report 等唤醒编排者并汇总结果。每个 Worker 以自身持久化的会话日志为工作真相来源;插件维护 roster(指针列表)以及 Worker 提交的报告与 escalations。

和常见多智能体做法的差异

许多多智能体方案要在阻塞等待(编排者空转)和轮询(反复查状态、消耗 token)之间二选一。README 说明 dsh-squad 采用不同机制:

  1. Worker 主动唤醒编排者:Worker 报告或升级时,插件向编排者会话投递消息;若编排者空闲则立即开一轮,若忙碌则排队到当前轮之后,无需轮询。
  2. squad_watch 非阻塞:注册真实的 DSH 后台任务并立刻返回 job id,编排者可在长任务运行期间继续规划;完成时会被唤醒并带上结果。
  3. 舰队可跨重启恢复:roster 持久化;Worker 会话使用 durable 标题 squad:<name>,即便状态文件丢失也可通过标题识别;重新 spawn 时会采纳已有会话而非重复创建。

环境要求

  • DeepSeek Harness >= 0.1.7-rc.1(package.json 中 engines.dsh 与此一致)。
  • 使用 squad_watch 时,Harness 的 Web profile 需提供 @deepseek-ai/dsh-tool-jobs;README 称标准 DSH web profile 已包含。

安装与启用

从 npm 或 GitHub 安装(需 --profile web):

dsh plugin --profile web add @nilesh32236/dsh-squad
# 或直接从 GitHub 安装同一插件:
# dsh plugin --profile web add github:nilesh32236/dsh-squad

在插件管理器中启用对应 bundle 后重启 DSH——插件 JavaScript 不支持热重载。

本地开发链接方式见仓库 README(含 tools/dev-links.mjs);日常从 npm/GitHub 安装无需该脚本。

编排者与 Worker 工具概览

编排者侧

工具 作用
squad_spawn 在其它工作区创建或采纳 Worker;按名称幂等;未知 cwd 会注册为新工作区
squad_resume 重新挂载所有 Worker 并说明各自所需;每次恢复会话或重启后应先调用
squad_brief 面向用户的一键状态摘要:每个 Worker 一行、待决策项、建议下一步
squad_list roster:项目、状态、排队任务、未读报告与 escalations
squad_assign 派任务;queue 为独立新轮次,steer 注入当前运行轮次;也可用于回复 escalation
squad_wait 阻塞直到 Worker 完成;mode: "all" 可一次收齐整次 fan-out
squad_watch 与 squad_wait 相同条件,但在后台执行,立即返回 job id
squad_status 单个 Worker 详情
squad_collect 读取报告与 escalations 并标记为已投递
squad_stop 取消 Worker 当前轮;可选保留或丢弃排队任务
squad_close 从 roster 移除 Worker;会话日志保留

Worker 侧

工具 作用
squad_report 提交结果(done / partial / blocked)及摘要与产物;会唤醒编排者
squad_escalate 向编排者请求仅其能做的决策;会唤醒编排者

非 Squad Worker 会话调用上述 Worker 工具会被拒绝,因此在其它场景下相对安全。编排侧工具可用 Worker 名称或会话 id 寻址。

任务投递:queue 与 steer

二者为同一类持久消息,投递目标不同:

模式 投递方式 适用
queue next-turn,当前轮结束后的新轮 常规派活,不中断进行中的轮
steer next-step,在当前轮下一步边界注入 实时改向、回复 escalation

Worker 空闲时,两种模式都会立即开轮。

典型用法

快速开始

  1. 新建会话并选择 Orchestrator agent preset。
  2. 按项目与角色创建舰队,例如:
squad_spawn  name: reviewer  project: my-frontend   preset: squad-reviewer
squad_spawn  name: fixer     project: my-backend    preset: squad-fixer
  1. 先 fan-out,再一次性 gather。squad_assign 会立即返回,应在等待任一 Worker 之前把任务全部派出:
squad_assign  name: reviewer  task: "Audit the auth flow for missing checks."
squad_assign  name: fixer     task: "Fix the flaky retry test in tests/retry.test.js."
squad_wait    mode: all
squad_collect name: reviewer
squad_collect name: fixer

README 强调最常见错误是按 Worker 循环做「assign → wait → collect」,会把本可并行的舰队串行化。应对所有人先 assign,再 wait / collect。

  1. 耗时较长的任务用 squad_watch 替代 squad_wait,编排者可持续其它工作。

编排者如何得知 Worker 完成

报告或 escalation 会在编排者会话中插入类似消息,并提示用 squad_collect 读取全文。因此空闲的编排者仍会响应,无需轮询。若希望改为自行轮询,可设置 notifyOnReport: false(README 提及)。

Campaign 记忆目录

squad_spawn 会报告 campaign 树;报告会自动归档为 markdown,路径形如:

$DSH_HOME/squad/campaigns/<orchestrator-session>/
  INDEX.md          # 每次报告后重建:roster 表与布局
  reports/          # 每个 Worker 报告一份 md
  escalations/      # 每个升级问题一份 md
  notes/            # 编排者写入的 campaign 记忆
  tasks/            # 任务板

该树按编排者会话划分;新的编排者会话从空树开始。roster 是插件索引;此目录是可单独用文件浏览器阅读的持久记录。

Worker 失败信号

README 说明:一轮结束时没有 squad_report 即视为失败(模型错误、放弃、会话中途被 kill 等统一按此处理)。具体恢复与重试策略见仓库完整文档(已抓取片段在此截断)。

适用场景与注意

适合:需要在多个仓库/工作区并行跑角色化 Worker(审查、修复、专项优化等),且希望从一个编排聊天里派活、收报告、处理阻塞升级;希望避免编排者阻塞轮询或空等。

注意:

  • 插件以当前 DSH 进程权限运行,安装前请阅读 GitHub 源码 与 MIT 许可证(package.json),确认符合你的安全与合规要求。
  • 社区目录 SkillHub 插件页 与 GitHub 为独立信息源,与 DeepSeek / 幻方无官方从属关系;DSH 生态理念是「一切皆插件」,本文事实以仓库 README 与 package.json 为准。
  • 当前 npm 版本为 1.1.0;GitHub 星标为 0(截至资料抓取),不代表功能完整性,使用前请以 README 与 release 为准自测。

结尾

dsh-squad 把跨工作区 Worker 会话的创建、任务队列与 steer、后台监视、报告收集和 escalation 收敛成编排者侧的一组工具,并靠 Worker 上报唤醒编排者、持久 roster 与 campaign 目录降低多项目并行的协调成本。若你已在用 DSH 管理多仓库智能体,可按上文安装命令启用 Web profile bundle,从 Orchestrator preset 与 squad_spawn / squad_assign / squad_wait 流程试跑。

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

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

Xiaoye