dsh-project-room:在 DeepSeek Harness 里用「项目群」做多角色协作

前言

在 DSH 里做多智能体协作时,常见做法是多个独立会话之间来回粘贴上下文,或者用一个会话里轮流扮演不同角色。前者状态难对齐,后者又很难做到「每个角色真有独立工作目录和执行能力」。如果你希望「一个项目对应一条持久群聊时间线」,且协调者、前端、后端、测试、运维等各自拥有独立的 Harness 会话,任务推进只依赖真实执行与证据,而不是聊天 UI 换皮,可以看一下社区插件 dsh-project-room(项目群 / Project Room)。

这是什么

dsh-project-room 由维护者 duxingxiake3 发布,在 SkillHub 插件目录 中归类为客户端插件。源码仓库:github.com/duxingxiake3/dsh-project-room(package.json 标注版本 0.1.0,许可证 MIT)。

一句话定位:一个项目 = 一个持久项目群聊。用户、协调代理、前端、后端、测试、运维等同处一条群消息时间线,但每个成员背后都是真正独立的 Harness 会话,各自有工作上下文和真实执行能力;投递会落到真实 session,任务状态由真实执行与证据驱动,模型可按成员分别路由。

核心功能

下面只列 README 与包描述中已写明的能力。

独立会话,而非聊天皮肤

群内每一次「交付」进入真实 session;任务状态不由 UI 假装完成,而由协调者与成员通过 room 工具落盘计划、依赖与验收。这与「单会话多角色扮演」或纯前端群聊展示有本质区别。

建群与成员

在左侧栏打开 Project Room → New project room,可配置:

字段 作用
Room name 房间名称
Workspace directory 成员执行任务的工作目录(成员 session 的 cwd),可留空后在房间设置中补全
Overall goal 交给协调者的总体目标;提交后由协调者拆解、分配并推进
Initial members 勾选协调者 / 前端 / 后端 / 测试 / 运维 / 设计 / 文档等,或先只建协调者再增补
Model per member 每位成员可单独选模型,或留空跟随角色/项目默认;选项来自宿主已接好的 provider 与 model ID

创建房间时,房间、成员与 room.created 事件在同一事务中写入,再创建成员 session,避免「半支队伍」的中间态。

按成员选模型

优先级从低到高:项目默认(房间设置 → Models)→ 角色默认(Role defaults)→ 成员绑定(成员详情 → Model)。默认可选模式为 fixed:用户为每位成员固定模型,不会静默换模。

在成员详情中选模型并点 Apply model 时,当前进行中的请求仍走旧路由,下一次请求才用新模型;成员身份、会话不重建,也不重复工具副作用。界面上的「实际路由」行展示的是真实请求上观察到的 provider/model,而非仅配置表里的值。模型 ID 须写成宿主已接线的 provider/modelID 形式。

三种 @ 与任务交接

  1. 右键头像 → @ them:指定收件人,不自动发送,保留草稿;对自己 @ 仅留备注,不触发模型调用。
  2. 输入框输入 @:弹出成员列表,可筛 display name / handle / 角色 / 别名;首项为 Everyone。
  3. 直接输入 @name:服务端用确定性规则解析为与 chip 相同的 memberId 列表(前后端共用 shared/mention-resolver.js)。

规则要点:代码块、URL、邮箱内的 @ 不触发;不重名歧义时不用 LLM 猜人;@everyone / @all 在发送时展开为当前活跃 AI 成员;@user 只通知人类成员。未 @ 任何人的消息默认交给协调者。总体目标可在建群时填写,或在群里直接对协调者说明。

持久化与启停

  • 激活成功会写启动记录:<DSH_HOME>/storages/project-room/boot-report.json(含解析到的核心版本、注册工具名、能力标志、历次激活历史等;版本无法确定时 UI 会标明兼容性未验证)。
  • 项目历史在 <DSH_HOME>/storages/project-room/rooms.sqlite;卸载插件不会删除历史,重装可续用。彻底清理需先禁用插件再删除该存储目录。

安装与启用

插件为纯 ESM 包,README 写明无额外安装依赖:宿主侧仅 Node 内置模块,浏览器侧为自注册 classic script,无需单独构建工具链。

官方 README 给出的流程是:先取得仓库副本,再在 Harness 插件管理器中以本地路径安装(等价于 dsh plugin install),目标为仓库目录 <REPO>:

# Clone this repository first
git clone https://github.com/duxingxiake3/dsh-project-room.git
# Then install the cloned directory as a local path in Harness's plugin manager
# (equivalent to dsh plugin install)
#   target: <REPO>

安装后,profile 的 package.json 会增加 link: 依赖,cordis.patch.yml 会增加:

- insert:
    - id: project-room
      name: 'dsh-project-room'

禁用:在插件管理器中关闭 project-room 条目;已启动任务按当前设置继续,再次启用会从 boot-report.json 与房间数据库恢复。卸载:在管理器中移除 dsh-project-room;历史仍保留于 rooms.sqlite。

典型用法

  1. 按上文完成本地路径安装并启用,确认 boot-report.json 已生成且工具注册正常。
  2. 侧边栏 Project Room → New project room,填写名称、工作目录(可选)、总体目标,勾选初始成员并为需要的人指定 provider/modelID。
  3. 在群时间线中用 @ 指定前端、后端等提问或派工;未 @ 时由协调者接话并拆解计划。
  4. 需要换模型时,在成员详情中修改并 Apply model,观察下一次请求的实际路由行是否符合预期。
  5. 长期项目可直接依赖 rooms.sqlite 持久化;换机或重装插件后,只要不删存储目录即可续聊。

适用场景与注意

适合:希望在 DSH 内用「群聊时间线 + 多独立 session」做功能交付、希望协调者与专业角色分工且能按成员选模型的团队或个人。

注意:

  • 插件在当前 DSH 进程权限下运行,安装前请自行审阅 源码仓库 与 MIT 许可证。
  • SkillHub 为社区目录,与 DeepSeek / 幻方无官方从属关系;安装来源以你信任的仓库与本地审查为准。
  • peer 依赖包括 @deepseek-ai/dsh-agent、dsh-session、dsh-web 等,需与宿主 DSH 版本匹配;boot-report.json 可用于核对实际加载版本与工具能力。

结尾

dsh-project-room 把「一个项目一个群」落到 DSH 的持久存储与多 session 执行上,适合不想在多个会话间手工同步、又需要真实任务与证据链的协作方式。进一步了解可看 SkillHub 目录页 与 GitHub README(含 中文 README)。

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

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

小夜