dsh-channel-core:在 Discord 與飛書上跑 DeepSeek Harness 渠道會話

前言

在 DeepSeek Harness(DSH)裏做智能體,常見做法是在桌面或 Web 客戶端裏對話。若希望從 Discord 私信或飛書/Lark 直接驅動同一條原生 Session,還要把進度、Ask User 和定時任務結果可靠地推回渠道,往往需要自己接 Bot、管憑證、防重複投遞和跨渠道身份對齊。Channel Core 把 Discord 與飛書適配收進同一個插件包,並與 DSH 原生的 steer/queue/interrupt、Ask User 和進度展示對齊。

這是什麼

dsh-channel-core(倉庫 Kerberos255/dsh-channel-core)由維護者 Kerberos255 發佈,在 SkillHub 目錄中歸類爲客戶端插件。README 的定位是:一個插件同時覆蓋 Discord 與 Feishu/Lark 渠道,提供已驗證的 owner 身份、可選的跨渠道共享 Session、可靠的消息投遞,以及進度/狀態集成。插件不替代 Host 上的模型與任務引擎,只管理渠道側的投遞、回執與綁定狀態。

核心功能

雙渠道與獨立生命週期

Discord 與飛書適配器在同一 npm 包內,各自使用獨立憑證與連接生命週期。在 Settings → Plugins → Channels & Sessions 中分別配置 Discord、飛書 Tab、平臺憑證以及允許的用戶/頻道;僅連接成功並不自動授權消息投遞。

身份驗證與會話映射

每個 Bot 賬號下會驗證 channel owner。羣聊與未驗證用戶不應繼承個人記憶(personal-memory)權限。在入站消息通過渠道 allow 規則後,可對首次私信做自動 owner 認領,也支持手動選擇 owner。若顯式配置,可將同一已驗證 owner 在不同渠道上的私信映射到同一個原生 DSH Session;共享長期記憶不必強制共享 Session。Session 映射決策可審計,不能靜默複用其他 workspace 的 Session。

入站可靠性與原生交互

插件使用持久化入站回執、串行 Session 准入,以及原生 steer/queue/interrupt,避免重放消息。Ask User 提交後,Discord 與飛書都會把問題與所選/自定義答案呈現爲只讀回執並移除交互控件,已提交的上下文保持可見且不會作爲重複答案再發。Discord 在滾動進度消息中流式展示 thinking、draft 與 tool 活動;飛書支持 CardKit 組件流式,並有 IM 卡片回退,draft 與 thinking 有獨立可見性開關。

斜槓命令

Discord 提供扁平命令:/new、/stop、/status、/session、/answer、/prompt、/model、/think。飛書支持文本形式的同名命令。模型選擇受可用模型約束,從下一輪生效;provider 歧義時會給出候選。

主動出站(channel_send)

智能體可在沒有先入站消息的情況下發起出站。面向模型的渠道工具爲 channel_send({ text?, imagePath?, filePath?, bindingId?, idempotencyKey? }),向當前原生 Session 已授權且符合條件的 Feishu 或 Discord 目的地發送。一次調用可發文本、一張飛書圖片或一個飛書文件;filePath 須在當前 workspace 內,以媒體上傳而非 Markdown 路徑發送。Session 只能向自身 eligible binding 發送;多 binding 須顯式 bindingId,不接受任意 recipient ID 或跨 Session 投遞。投遞經 durable outbox,狀態爲 pending、sent、failed 或 uncertain;穩定 idempotency key 不會重複發送同一條消息。

受信 Host API ctx.channelCore.sendToBoundSession({ sessionId, text, idempotencyKey, bindingId?, source? }) 仍可供調度器與其他插件使用;outboundTargets(sessionId) 返回 eligible binding ID,不暴露 recipient ID。飛書側 channel_send 還支持 { filePath: "_scratch/report.pdf" } 等形式的真實可下載附件(README 列出的格式含 PDF、Office、壓縮包、TXT、CSV、Markdown、JSON 等,以倉庫文檔爲準)。

可選任務通知

General & Sessions → Task notifications 默認關閉。開啓後可選擇通知渠道(None、Feishu 或 Discord),且僅限當前 Host 已啓用並配置的渠道。調度任務失敗時,可向已驗證 owner 的 DM 發送簡短告警,不會發到任意聊天;收件人解析跟隨當前 authorized channel binding,正常 /new 或歸檔 Session 交接一般無需重配。其他插件可獨立發出 dsh/task-alert 等事件,由 Channel Core 負責選擇與投遞;payload 不包含私密對話正文。

安裝與啓用

需要與 package.json 中 peer 服務兼容的 DSH Host,以及你所啓用渠道的憑證。安裝或更新代碼後需重啓 DSH。若需可復現安裝,可將安裝 pin 到指定 Git commit。

dsh plugin --profile desktop add github:Kerberos255/dsh-channel-core

將 desktop 換成你實際使用的 DSH profile 名稱。

典型用法

按 README Quick start,建議順序如下:

  1. 打開 Settings → Plugins → Channels & Sessions。
  2. 在 Discord 和/或飛書 Tab 中填寫平臺憑證與 allowed users/channels。
  3. 檢查各渠道的 owner 識別模式(自動首次 DM 認領或手動選擇)。
  4. 若要在 Discord 與飛書之間共用同一條 live DSH session,按需關聯 owner 賬號;僅共享記憶時可不做 Session 共享。
  5. 發送測試私信,確認綁定 workspace、Session 與進度輸出是否符合預期。

定時任務或報表生成後,可在 Session 內調用 channel_send 推送結果;若需寫入對話歷史,應使用綁定到相關 Session 的原生 DSH Schedule。本地可運行 npm test 做無外部依賴的迴歸;npm run test:host 需在已配置的 DSH 開發環境中運行更廣的集成套件。README 明確:CI 通過不能證明真實 Discord、飛書或網絡鑑權;Bot 投遞與 UI 交互需在自有 Host 上驗證。

適用場景與注意

適合已在 DSH 上運行智能體、並希望通過 Discord 私信或飛書/Lark 與同一 Harness 會話交互的開發者或團隊。需要跨渠道統一 Session、原生 Ask User、流式進度,或由調度/插件向已綁定渠道主動發消息時,該插件與 Host 原生能力是對齊的。

安全與運維邊界(摘自 README):設置與渠道文件保存在本機 DSH,勿上傳憑證、binding 數據庫或歷史消息;配置可參考倉庫 config.example.json。插件以當前 dsh 進程權限運行,安裝前應自行審閱源碼與 MIT 許可證(見 LICENSE)。DSH 生態強調「一切皆插件」;SkillHub 等社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。

同維護者的相關項目包括 dsh-status-cards、dsh-memory-dreaming、dsh-lossless-context,可按需組合,並非安裝 Channel Core 的前置條件。

結尾

Channel Core 把 Discord 與飛書收進單一 DSH 客戶端插件:驗證 owner、可選共享 Session、 durable 投遞與原生進度/Ask User 一體。目錄頁:skillhub.cn/plugins/Kerberos255/dsh-channel-core;源碼與完整說明:github.com/Kerberos255/dsh-channel-core。

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

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

小夜