前言¶
在 DeepSeek Harness(dsh)里,子智能体、Agent Teams 等委托能力已经能把任务拆下去,但那是层级关系:生命周期绑在父会话上。如果你自己开了多个顶层对话——例如前端一条、后端一条、文档一条——它们共享同一个工作目录,却没法直接说「我在改 src/ui.ts,请先别动」,也没法约定「某个 API 字段已经冻结」。
dsh-session-messaging 是社区维护的工作流类插件,在同一 workspace 里为用户自启的顶层会话之间增加一条对等消息通道,用于协调任务、声明文件写入范围,并在重叠时给出冲突提示,而不把这些会话变成父子 subagent。
这是什么¶
- 仓库: XBXyftx/dsh-session-messaging
- 目录页: SkillHub 插件条目
- 维护者: XBXyftx
- 许可证: MIT
- npm 包名:
dsh-session-messaging(资料中最新版本为0.4.0)
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 重载,两条插件行通常无需重启应用即可激活。
从 link 安装切到 npm 时¶
若 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 仓库。