dsh-session-messaging:同一工作区内会话对等协作

前言

在 DeepSeek Harness(dsh)里,子智能体、Agent Teams 等委托能力已经能把任务拆下去,但那是层级关系:生命周期绑在父会话上。如果你自己开了多个顶层对话——例如前端一条、后端一条、文档一条——它们共享同一个工作目录,却没法直接说「我在改 src/ui.ts,请先别动」,也没法约定「某个 API 字段已经冻结」。

dsh-session-messaging 是社区维护的工作流类插件,在同一 workspace 里为用户自启的顶层会话之间增加一条对等消息通道,用于协调任务、声明文件写入范围,并在重叠时给出冲突提示,而不把这些会话变成父子 subagent。

这是什么

README 标明插件仍处于早期预览阶段,面向 dsh 0.2.1-rc.2;上游 dsh 插件 API 尚未稳定,升级宿主时可能出现破坏性变更。SkillHub 上该条目星标为 1(以目录页展示为准)。

核心功能

下面介绍插件在资料中明确列出的能力。

对等发现与发信

  • 同一工作目录下的顶层会话可以彼此发现。
  • 模型可通过工具向对端会话投递协调消息;消息以对端对话里的一条普通用户消息形式出现,并带有 session-message 来源信封(发送方 id、时间戳,以及「对端不是权威指令来源」的说明)。
  • 每个会话可单独暂停接收对端消息。

工具面

工具 作用(摘要)
session_peers 列出同目录、仍在线的顶层会话及其接收状态
session_send 转发协调消息,可附带 writeScopes,也可回复某条消息
session_reception 暂停/恢复本会话接收对端消息,并声明本会话的写入范围

写入范围与冲突提示

写入范围(write scopes)是建议性声明,不是硬锁。若对端声明的路径与己方重叠,接收方与消息信封会携带 conflict-warning,双方都会看到提示。

侧栏与客户端

左侧栏有「Session Messaging」入口:可切换是否允许跨目录发信(经 dsh 设置表单持久化)、检查 npm 最新版本、打开 npm/GitHub/作者博客。安装或升级 bundle 后,Web UI 需刷新一次,客户端才能加入模块图。

其他行为约束(资料原文)

  • 不新增 Session 事件类型,也不改 SESSION_FORMAT_VERSION;中继走持久的 user/message,source 为 session-message。
  • Cold-session delivery:目标会话若未在线,默认通过 Web/Desktop 的 sessionController 先恢复再投递(allowColdDelivery,默认开启)。
  • 有界限制:消息大小、单发送方→单目标速率限制、仅顶层会话、禁止自发自收。默认允许跨目录对端;sameDirectoryOnly: true 可限制为同一工作目录。

安装与启用

环境要求(来自 README / package.json):

  • DeepSeek Harness 0.2.1-rc.2(桌面端或源码检出)。
  • Node.js >= 22.19.0。
  • 插件依赖宿主自带的 @deepseek-ai/{cordis,schemastery,dsh-agent,dsh-llm,dsh-session,dsh-tools} 等 peer,从运行中的 dsh 安装解析。

从 npm 安装(推荐)

将 <profile> 换成你使用的 dsh profile(桌面端常见为 desktop):

dsh plugin --profile <profile> add dsh-session-messaging

从 GitHub 安装

dsh plugin --profile <profile> add github:XBXyftx/dsh-session-messaging

仓库自带构建好的 lib/,git 安装不会触发构建。

本地路径安装

dsh plugin --profile <profile> add /absolute/path/to/dsh-session-messaging

验证是否生效

  • 智能体工具列表中出现 session_peers、session_send、session_reception。
  • plugin_manager list_plugins 应同时报告 session-messaging 与 session-messaging-tools,且 fiberPhase: active。

在 dsh 0.2.1-rc.2 上,配置可通过 HMR 重载,两条插件行通常无需重启应用即可激活。

若 profile 曾 link 本地检出,又在应用运行时安装了 npm 包,运行中的 Loader 可能仍指向旧路径。README 建议先移除再装最新包,并重启应用(Web 端刷新页面即可满足客户端一半):

dsh plugin --profile <profile> remove dsh-session-messaging
dsh plugin --profile <profile> add dsh-session-messaging@latest

典型用法

在同一工作目录打开两个会话,让任一侧模型发起协调即可;工具面向模型,不依赖额外手工 UI。

README 中的示例提示:

Use session_peers to see which other sessions are working here.
Send session-b a message: I am editing src/ui.ts and declared it in writeScopes; avoid it.
Check whether anyone else declared a conflicting write scope before you edit src/api.ts.
Pause receiving peer messages for this session.

消息到达对端后,会进入该会话日志;对端模型在下一步请求中能看到内容,并可通过 session_send 回复。信封始终说明消息来自其他会话而非当前用户,对端文本按数据对待,不视为更高优先级指令。

工作机制(简述)

资料中的调用链如下,便于理解「发出去」之后发生了什么:

Session A (model) calls session_send
  → tools.ts uses exec.agent as the only identity source
  → service.send validates target, body, scopes, reception, rate limit
  → createUserMessage({ content: envelope + body, source: session-message/relay })
  → target.steer(message)
  → await ctx.sessions.flush(target.session)
Session B's log gains a user/message with source.kind = 'session-message'
  → deriveMessages() rebuilds it → B's next model request sees it → B can reply

适用场景与注意

适合谁:在同一仓库、多个顶层 dsh 会话并行改代码或写文档,需要轻量协调(谁在改哪条路径、API 是否冻结、缺陷报告与回归验证)的团队或个人;不想为每次协作都拉起 subagent 树时。

权限与安全:插件以当前 dsh 进程权限运行,安装前请阅读仓库源码与 MIT 许可证,并只在可信环境启用。社区目录 SkillHub 与 DeepSeek / 幻方无官方从属关系,插件亦非宿主内置组件。

生态背景:dsh 强调「一切皆插件」;本插件是工作流方向的对等会话扩展,与层级委托互补而非替代。

结尾

dsh-session-messaging 在同一 workspace 的顶层会话之间补上对等消息与写入范围建议,让多对话并行开发时有可操作的协调面,同时保持「对端非权威」的边界。进一步了解可访问 SkillHub 目录页 与 GitHub 仓库。

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

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

Xiaoye