前言¶
在 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 形式。
三种 @ 与任务交接¶
- 右键头像 → @ them:指定收件人,不自动发送,保留草稿;对自己 @ 仅留备注,不触发模型调用。
- 输入框输入
@:弹出成员列表,可筛 display name / handle / 角色 / 别名;首项为 Everyone。 - 直接输入
@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。
典型用法¶
- 按上文完成本地路径安装并启用,确认
boot-report.json已生成且工具注册正常。 - 侧边栏 Project Room → New project room,填写名称、工作目录(可选)、总体目标,勾选初始成员并为需要的人指定
provider/modelID。 - 在群时间线中用
@指定前端、后端等提问或派工;未 @ 时由协调者接话并拆解计划。 - 需要换模型时,在成员详情中修改并 Apply model,观察下一次请求的实际路由行是否符合预期。
- 长期项目可直接依赖
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)。