dsh-session-mailbox:让 DSH 普通会话对等互发消息

前言

在 DeepSeek Harness(DSH)里,每个会话都是独立上下文。要把「实施」会话里的活交给侧边栏里长期维护的「审查」会话,常见做法只有人手复制粘贴、开一次性 subagent,或接入实验性的 Agent Teams(Lead + 队员 + 共享任务板)。这些路径要么要人工搬运,要么是父子或团队层级,并不是两个普通会话之间的直接协作。

下面介绍维护者 yinying8761 在 GitHub 发布的 dsh-session-mailbox(会话信箱):装上之后,在全局工具层注册三个工具,任意两个普通会话可以互相列出、读取、投递消息,无需改 agent preset,也不需要 Lead/teammate 结构。

这是什么

dsh-session-mailbox 是面向 DSH Web 或 Desktop profile 的 Host 插件 bundle,当前版本 1.1.0,许可证 MIT。它依赖 Host 侧的 sessionController 与 sessionQuery,在 DSH 0.2.2-rc.1 上开发与验证。

一句话定位:让一个会话里的 AI 把消息或任务交给另一个会话,并读回对方结果;双方是对等关系,不是 subagent 父子,也不是 Agent Teams。

项目地址:GitHub - yinying8761/dsh-session-mailbox
社区目录:SkillHub 插件页

核心功能

安装后无需额外配置(可选目标策略见后文),所有会话自动拥有下列工具。

工具 作用 是否会唤醒目标会话
session_list 列出会话:标题、最近活动、是否在跑、会话 id;可按标题片段过滤 否
session_read 读取某会话最近的 user / assistant 消息 否
session_send 向某会话投递消息或任务 是

session_send 的 target 可填会话 id、完整标题,或唯一的标题片段。mode 可选 queue(默认,作为下一回合输入,适合交办)或 steer(对方正在跑时插入最近一步,适合催办或纠偏)。

与同类社区实现相比,README 明确:本插件唯一独有的能力是目标策略(defaultAllow / allow / deny)。投递不走文件信箱,直接按 id/标题入箱;bundle 零依赖、无构建步骤。

安装与启用

需要 DSH 的 Web 或 Desktop profile。从 GitHub 安装指定标签:

plugin_manager  install_bundle  git+https://github.com/yinying8761/dsh-session-mailbox.git#v1.1.0

本地开发时可用目录绝对路径:

plugin_manager  install_bundle  <本包目录的绝对路径>

安装后三个工具挂在全局工具层。若修改了插件内的 index.js,需要重启 Harness 才会加载新的 JS 模块。

安装前建议自行查看仓库源码与 MIT 许可证。插件在当前 profile 的 DSH 进程权限下运行:session_send 会唤醒目标会话并在其工作目录(来自目标会话自己的 header.cwd,而非发信人)里执行;profile 若为 danger-full-access,跨工作区投递等价于允许一个会话驱动另一个会话全权执行,插件本身不做工作区隔离。

典型用法

下列表述是你对当前会话说的自然语言,模型会自行调用工具,无需背诵 API。

交办任务(A → B)

用 session_send 把「跑一遍后端测试并修复失败项」交给「二号实施者」。写成完整指令,它看不到我们这个对话。

只读进度(不打扰)

用 session_read 读「需求等文档撰写者」最后 3 条消息,总结它完成了什么。

要求回信(B → A)

结论用 session_send 回给发信人。

催正在跑的会话

用 session_send 以 steer 模式告诉「审查者」:先别管风格问题,只报阻塞项。

标题片段匹配到多个会话时会报错并列出候选,此时改用会话 id,例如:

用 session_send 发给 session-06ed43db-3976-4537-814a-66113d90509d。

目标会话收到的是带前缀的普通用户消息,内含来源与会话 id,并提示对方用 session_send 回信,形成双向交付。只想看进度用 session_read,不要用 session_send,因为投递即唤醒。

可选:目标策略

默认所有会话互相可见、可投递。要在 profile 收紧边界时,在 cordis.patch.yml 里为该 bundle 增加 config:

- id: session-mailbox
  name: dsh-session-mailbox
  config:
    defaultAllow: true     # 默认是否允许(默认 true)
    allow: []              # 非空时,只有名单内的目标可投递、可读
    deny: []               # 永远拒绝,优先级最高

匹配规则为精确匹配(完整 session id 或完整标题,大小写不敏感),不做片段匹配。优先级:deny > allow > defaultAllow。策略同时作用于 session_send 与 session_read;session_list 仍列出全部会话,被拒目标标注 blocked by policy。改配置后需重启 Harness。1.1.0 为配置式,尚无会话级图形开关。

示例:仅允许两个会话互通:

config:
  defaultAllow: false
  allow: ["审查者", "需求等文档撰写者"]

适用场景与限制

适合:你在侧边栏长期维护多个职责分明的普通会话(撰写、实施、审查等),需要对等交接任务、读进度、回信,又不想上 Agent Teams 或临时 subagent。

限制(以 README 为准):

  • 只能投递给普通会话;subagent 子会话会被拒绝(那种场景用内置 send_message)。
  • 不能投给调用方自己。
  • 尚未有过一轮的空会话不在列表里,也无法按 id 投递。
  • 不做去重:模型重试同一 session_send 会投递两次。
  • 投递正文截断 4000 字符;读回单条消息截断 1500 字符。
  • 列表为 profile 级,跨工作区可见;普通会话超过列表上限时需用标题片段过滤。

与其它做法的对照:内置 subagent 适合一次性子任务;@ 引用会话是单向只读拉上下文;schedule 是定时投递;本插件强调任意两个普通会话对等收发。

结尾

dsh-session-mailbox 用三个全局工具补上了 DSH 多会话协作里「对等互发」这一形态:列表、只读、投递与唤醒分工清晰,并可用 allow/deny 收紧谁能被唤醒。生态上 DSH 奉行「一切皆插件」;SkillHub 为社区目录站点,与 DeepSeek / 幻方无官方从属关系。

  • 目录页:https://www.skillhub.cn/plugins/yinying8761/dsh-session-mailbox
  • 仓库:https://github.com/yinying8761/dsh-session-mailbox
羽毛球分组比赛记分
小程序二维码

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

Xiaoye