前言¶
在 DeepSeek Harness(DSH)里开多个工作区时,会话通常各自独立:A 区里的 agent 不知道 B 区刚讨论的结论,也很难把本地文件或结构化 JSON 稳妥地交给另一个会话处理。靠复制粘贴或人工切换窗口,成本低但不可编排,也无法让 agent 在合适时机「等回信」或群发协作。
下面介绍社区插件 dsh-cross-workspace(维护者 dream-office,分类:工作流)。它在本机同一个 DSH Host 进程内充当跨工作区信使:不同工作区的会话可以互发消息、传文件与 JSON,支持手动群组、收件箱与管理面板,并提供可视化交流图。消息与附件落在本机信箱,插件不做出站网络请求。该插件为非官方实现,与 DeepSeek / DSH 官方无隶属关系。
这是什么¶
- 名称:
dsh-cross-workspace(跨工作区信使) - 当前版本(以仓库
package.json为准):0.8.5 - 许可证:MIT
- 仓库:https://github.com/dream-office/dsh-cross-workspace
- 目录页:https://www.skillhub.cn/plugins/dream-office/dsh-cross-workspace
一句话:让不同工作区里的 DSH 会话互相发消息、传文件、传 JSON;可手动拉群群发,也可在 Web 面板里像收邮件一样管理未读与历史。
三条运行时规则(理解投递结果时很重要):
- 消息先写入本机信箱,再决定只投信箱还是唤醒目标会话。
- 唤醒是「尽力而为 + 确认」:目标运行中会等待,超时则排队;归档、冷却或启动失败会降级,不谎报已成功唤醒。
- 跨工作区来信对收件 agent 属于外部输入,会标明并非当前用户或系统指令,不能用来绕过用户规则。
核心功能¶
寻址与投递¶
收件方通过 to 指定,支持工作区绝对路径或标题、会话 id、session:<id>、群组名、group:<名> 等写法;解析失败会返回可读错误与候选列表(如 ambiguous)。
mail_send 的 delivery.requested 表示请求模式,delivery.mode 表示实际生效模式。例如请求 wake 时,可能实际为 wake(已确认进入目标会话日志)、queued(目标忙,排队到下一轮)、mailbox(降级信箱)或 none(例如工作区无可唤醒会话)。工具调用成功不等于对方已读;需结合 delivery.mode 与后续回复判断。
群组¶
在面板左栏维护群组:跨工作区勾选会话、改名与增删成员;删除群组不删历史消息。Agent 工具只能向已有群组发信,不能自建群组。群发默认 mailbox;显式 wake=true 才尝试唤醒成员。可指定 memberSessionIds 只发给部分成员。
附件与 JSON¶
消息可带任意 JSON data 与本地 files 路径列表。附件复制到 $DSH_HOME/cross-workspace/attachments/<messageId>/,默认仅允许发送方工作区内的文件(realpath 校验);可在设置中开启 allowExternalAttachments(会放宽边界,需谨慎)。
面板与交流图¶
侧栏「跨工作区信使」提供收件箱、发信、群组管理;「交流图」展示 Agent 网络卡片图与跨 Agent 协作时间线(图与时间线条数有上限,侧重近期协作)。未读角标直到已读或「全部已读」才清除。
Agent 工具(节选)¶
安装验证通过后可使用 workspace_list、mail_send、mail_wait、mail_reply、mail_inbox、mail_read 等;完整参数见仓库 docs/API.md。
安装与启用¶
前置条件:DSH Desktop(带 Plugin Manager;README 实测 DSH 0.2.2-rc.1),Node.js >=22.13.0。插件无 npm 依赖、无构建步骤;engines.dsh 声明 >=0.2.2-rc.1。
本地目录安装(将路径换成你本机已存在的项目目录):
plugin_manager install_bundle target="<本项目绝对目录>"
期望:application: "applied",enabled: true(安装的是本地 link:,非复制)。
从 GitHub 获取源码后安装:仓库地址 https://github.com/dream-office/dsh-cross-workspace。按 README 将克隆后的目录作为 target 执行 plugin_manager install_bundle;升级时在仓库内更新后重新安装或重载。2026-11-07 起项目不再以 npm 作为分发渠道。
若插件已在列表但被禁用:在 Plugin Manager 中打开 include:cross-workspace。
卸载(历史消息保留在 $DSH_HOME/cross-workspace,卸载不删):
plugin_manager remove_bundle target=dsh-cross-workspace
验证安装:
workspace_list工具可用,或侧栏出现「跨工作区信使」图标。- 设置页出现「跨工作区信使」。
- 侧栏
sidebar.panellist、main、settings.section三个槽位为 active。
升级前建议备份 $DSH_HOME/cross-workspace;数据迁移说明见仓库 docs/UPGRADING.md。
典型用法¶
面板快速上手¶
- 刷新 DSH 页面,打开左侧「跨工作区信使」。
- 左栏选工作区或会话,中间查看收件箱。
- 「新消息」里选收件方(工作区 / 会话 / 群组),填写主题与正文,可选 JSON 与附件路径;需立即处理则勾选「唤醒」,否则只投信箱。
- 对方 agent 用工具回信,或在面板直接回复。
- 在「交流图」查看近期协作关系与时间线。
Agent 发信与等待(示例)¶
路径与会话 id 须以 workspace_list 返回值为准,勿照抄示例路径:
workspace_list
mail_send to="D:\\work\\项目A" subject="接口确认" body="..." wake=true
mail_send to="group:前端组" body="..."
mail_send to="group:前端组" memberSessionIds=["session-..."] body="..."
mail_wait timeoutSeconds=120
mail_reply id="m-..." body="收到"
发信后务必查看返回的 delivery.mode,再决定是否 mail_wait 或继续对话。
设置要点¶
在 设置 → 跨工作区信使 中可调整默认值与边界,例如:
| 设置 | 默认 | 作用(摘要) |
|---|---|---|
defaultDelivery |
wake |
未传 wake 时的默认投递方式 |
allowWake |
true |
关闭后所有唤醒降级信箱 |
allowWorkspaceBroadcast |
false |
工作区广播,默认关闭 |
promptContext |
true |
是否在系统提示注入未读摘要 |
retentionDays |
30 |
过期清理(0 表示不按天清理) |
maxHops |
6 |
回复链深度上限,防唤醒循环 |
allowExternalAttachments |
false |
是否允许工作区外附件 |
更多上限(正文大小、附件数量等)见 lib/store.js 的 DEFAULT_SETTINGS;运行期以 store.json 为准。
适用场景与注意¶
适合:同一台机器上多个 DSH 工作区需要编排式通信——例如后端工作区把接口约定 JSON 发给前端工作区会话、多 agent 拉群同步状态、某会话 mail_wait 等另一边的结论再继续。
安全与权限:数据仅存本机 $DSH_HOME/cross-workspace;管理 API 需 POST 与约定请求头,在 Host 已认证页面上下文中使用。插件按单机单 Owner 设计,不是多租户隔离。安装与启用前,应按惯例自行审阅源码与 MIT 许可证;插件以当前 DSH 进程权限访问本机文件与会话。
会话过滤(DSH 0.2.4+):已归档、空白「新会话」、失效会话不会出现在可选列表;仍可用显式 session:<id> 投递,但唤醒归档目标会诚实报告未唤醒。
仓库文档(AGENTS.md、docs/API.md、docs/ARCHITECTURE.md)供开发与验收对照;README 记载测试为 191 tests / 57 suites(以当前仓库为准)。
结尾¶
dsh-cross-workspace 把多工作区之间的消息、文件与 JSON 交换收拢到本机信箱与一套明确投递语义里,并配上收件箱、群组与交流图,便于人或 agent 协同。如需安装说明与最新版本,以 GitHub README 为准;社区索引见 SkillHub 目录页 与 dream-office/dsh-cross-workspace。