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:

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

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

小夜