dsh-im-gateway:将外部 IM 桥接到 DeepSeek Harness 持久 Agent

前言

在 DeepSeek Harness(DSH)里跑智能体,常见入口是 Web UI 或 Webhook。若希望用户在微信、QQ、邮箱、5G 消息、飞书等现成渠道里连续对话,往往需要自建转发层,还要自己保证「每个聊天有独立上下文、进程重启不断话、回复走回原通道」。重复实现这些细节,维护成本很高。

下面介绍社区插件 dsh-im-gateway(维护者 fuqiang-lab):在 DSH(Cordis)进程内做多通道入站、按聊天映射持久 Agent、再按 rpcId 从全局会话事件流取回回复并下发。插件在 GitHub 上为 MIT 许可,当前 package.json 版本为 0.1.0,分类上常被标为模型推理相关能力(GitHub 约 1 star,2026-11-10)。

这是什么

dsh-im-gateway 是 DSH 的 IM 网关插件,一句话概括:外部 IM → 网关通道 → 与工作区绑定的持久 Harness Agent → 同一通道回传助手回复。

它同时提供遗留的单 HTTP Webhook,以及在 DSH 插件 页本 bundle 卡片上的多通道配置界面,覆盖六类通道:微信(ilink bot)、QQ(官方 bot)、邮箱 Email(SMTP/IMAP)、中国移动 5G 消息(WebSocket)、飞书(官方 bot)、通用 HTTP 回调。

核心功能

入站、桥接、出站

  1. Inbound:多通道网关接收各 IM 平台消息(Webhook / WebSocket / IMAP / QQ bot / ilink 等)。
  2. Bridge:每条消息注入与外部聊天稳定映射的 持久 Harness Agent,同聊天跨消息保留上下文,不同聊天、不同通道彼此隔离。
  3. Outbound:助手回复通过全局 session/event 流上的 rpcId claiming 采集,并经 收到该消息的同一通道 送回(有界重试)。

README 中的数据流示意如下:

external IM --POST--> [channel transport] -> [workspace-attached Agent/session per chat]
     ^                                                      |
     |                           global session/event stream (rpcId claim)
     +-- <-- same channel delivers <-- [collected reply]

Agent 与会话:与 DSH Webhook 路径对齐

  • 真实工作区挂载:会话挂在真实 Harness workspace(显式 cwd,否则插件默认 ~/.dsh/im-workspace),避免与 _no-cwd 持久日志冲突。
  • 模型与预设:installModelSelection 优先用通道显式 provider/model,否则用 DSH 运行时当前模型;挂载配置的 agent preset,并固定部署默认 permission preset。
  • 跨重启续聊:重启后通过 sessionQuery.observeSession 探测已有 stable session,用 agents.resume(...) 恢复;仅全新 id 走 agents.create(...)。
  • 回复采集:入站消息携带不透明 rpcId;每轮等待器订阅全局 session/event,认领该轮的 user/message → assistant/message → turn/end,避免竞态与 whenIdle() 轮询。

会话键与隔离

每个聊天对应稳定 session id,形如 im-<sha1(f"{channel}:{chat_id}")[0:16]>;若配置了工作目录(通道 cwd 或设置卡「全局默认工作目录」),则键中纳入 cwd。

  • 通道参与键:同一外部 chat_id 经不同通道(如邮件与 5G 消息)不会共用会话。
  • 工作目录参与键:DSH 在创建时固定 cwd,改目录即在新 workspace 开启新对话,旧会话仍在 Web UI 可打开。
  • generation(im / im-g<N>):/new 可让同聊天开启新轮次而不销毁旧会话。

网关内置保护

资料中明确列出的机制包括:可选 allowlist 发送方控制;5 秒内相同 chat + text 去重;每会话串行一轮对话;来源变化时注入 <dsh_im_source>;回复最多 2 次投递尝试;Web UI 已打开同会话时复用 live agent(createOrAdopt 语义);失败时在同聊天返回可见错误(含 60s agent 获取超时);微信 / CMCC / QQ 等通道的诚实连接状态与错误码处理。

IM 侧审批与用户追问

对网关创建/恢复的 Agent,会安装 bridge answerer:DSH 的 approval/request、user-questions/request 可通过同一 IM 通道向用户提问;IM 不可达时 next() 回退到 Web answerer,避免纯 Web 会话被误伤。

聊天内斜杠命令

在成为模型 prompt 之前,网关自行处理下列命令(不进入模型上下文):

命令 作用
/status 会话 id、generation、工作目录、live agent、permission preset
/new [工作目录] 为本聊天开新会话,可选绝对路径;旧会话保留
/perm [preset] 查看或切换 permission preset
/help 命令列表

/new 带相对路径会被拒绝;generation 游标为进程内内存,重启后各聊天回到配置目录所决定的会话。

安装与启用

插件以 bundle(推荐)或本地源码 overlay(开发)两种形式分发。bundle 加载已提交的 lib/index.js,安装时不运行 prepare/postinstall。

README 给出的 bundle 安装示例(请将 demo 换成你的 profile 名,将 you 换成你要添加的 Git 仓库 owner;本插件上游仓库为 fuqiang-lab/dsh-im-gateway):

dsh plugin --profile demo add github:you/dsh-im-gateway

也可在构建产物目录执行 pnpm pack 后安装 tgz(README 示例):

dsh plugin --profile demo add ./dsh-im-gateway-.tgz

运行环境要求(来自 package.json):Node ^22.19.0 || >=24.0.0;peer 依赖由当前 DSH 环境解析,无需自行重复安装 @deepseek-ai/cordis 等。

安装后,bundle 通过 cordis.patch.yml 插入 im-gateway 行;可在 profile 自己的 cordis.patch.yml 中覆盖配置(后加载层按行覆盖,需 restate 全部键)。

典型用法

在插件页配置通道

  1. 打开 DSH 侧边栏 插件。
  2. 在 已安装 中进入 dsh-im-gateway 卡片。
  3. 在包描述与通道列表之间的管理 UI 中新增通道;各类型带有预填模板,一般只需补全密钥、账号或扫码(微信 ilink 扫码绑定等)。

各通道需填写项与传输方式见 README 表格(如 QQ 需 q.qq.com 创建的 AppID/AppSecret,飞书 SDK 已 vendored 至 lib/vendor/ 等)。

与 Agent 对话

用户在外部 IM 中发送普通文本即可触发一轮模型回复;需要工具审批或追问时,按上文 bridge answerer 在 IM 中交互。运维可用 /status 确认当前会话与工作目录,用 /new 在同聊天切换工作区或重新开始一代对话。

遗留 HTTP Webhook

除多通道 UI 外,插件仍保留单 HTTP Webhook 路径,适合已有回调集成;细节以 README「Usage」及通道专节为准。

适用场景与注意

适合谁:已在 DSH 上部署 Cordis 插件体系、希望用国内常见 IM 或邮件作智能体前端,且需要按聊天持久上下文、与 Web UI 会话可并存操作的团队或个人。

权限与安全:插件与当前 dsh 进程同一权限 运行,可访问其所配置的工作目录与模型凭证。安装前请阅读源码与 MIT 许可证,按需配置 allowlist、secret 与网络暴露面;空 allowlist 表示允许所有发送方,需依赖密钥或内网隔离。

生态说明:DeepSeek Harness 主张「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系,不宜当作官方应用商店。

开发 overlay:本地迭代可对 src/ 使用 --patch(见 README「Load the local source overlay」);修改 src/ 后须 pnpm build 并提交 lib/,否则 Git 安装不会自动构建。

结尾

dsh-im-gateway 把多通道 IM 收发、会话键隔离、rpcId 回复认领和 IM 侧审批桥接收敛进一个 DSH 插件,降低「聊天软件里用 Harness Agent」的集成工作量。进一步了解可看社区目录页与仓库 README:

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

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

Xiaoye