前言¶
把 DSH(DeepSeek Harness)接到 IM 上,常見做法是另起一個橋接進程,再配公網回調或 ngrok。對只想在本機出網、不想多維護一個守護進程的場景,這套鏈路偏重。
dsh-plugin-feishu 是 maintainer suveng 發佈的 DSH 客戶端類插件(cordis 插件包):裝進 profile 後由 DSH 進程加載,通過飛書 / Lark 長連接(WebSocket) 收消息,回覆以流式卡片寫回。思路與同作者的 pi-feishu-bridge 相近,但嵌在宿主進程裏,用 DSH 自己的 Agent API 驅動會話。
下面介紹定位、能力、安裝配置與使用注意。
這是什麼¶
- 名稱:
dsh-plugin-feishu(npm 包名一致,當前資料中版本 0.6.2,MIT 許可證)。 - 維護者:suveng;源碼與說明見 GitHub 倉庫,社區目錄頁:skillhub.cn/plugins/suveng/dsh-plugin-feishu。
- 一句話:把 DSH 會話接進飛書 / Lark 長連接,回覆以流式卡片回寫;不需要另起守護進程,不需要公網回調地址。
插件安裝後默認處於休眠狀態(無憑證時只打 warn,不影響 dsh --dump-config 與其它插件)。憑證配好後自動連上。
核心功能¶
資料中列出的能力如下(節選,均以 README 爲準)。
會話與消息¶
| 能力 | 說明 |
|---|---|
| 單聊 / 羣聊 / 話題 | 一個飛書會話對應一個 DSH 會話;話題(thread)單獨成會話 |
| 會話保持 | 飛書會話 ↔ DSH 會話映射落盤,DSH 重啓後可接着聊;網頁端同會話能複用則直接複用 |
| 消息串行 | 同一會話連發多條按順序處理,避免兩條消息搶同一輪次 |
| 內容去重 | 同一會話 5 秒內完全相同的一條文字只處理一次 |
回覆與交互¶
- 流式卡片:邊生成邊往卡片裏寫,輪次結束卡片轉終態。
- 正文模式:默認
replyBodyMode=final,只把本輪最終回覆寫進卡片正文;中間旁白、思考收進「執行過程」摺疊面板(live可退回舊行爲)。 - 執行過程:工具調用在卡片頂部摺疊面板逐條顯示步驟、成敗與耗時。
- 停止按鈕:卡片末尾「停止」等價於
/stop。 - 表情回執:收到消息先掛「收到」類表情(默認
Get),跑完DONE,失敗CRY(可關或自定義收到表情)。 - 引用展開:回覆某條消息時,被引用內容以
[Quoted message]前綴附在正文前(可配置字數上限)。 - 選擇題:模型用
ask_user_question時,問題以卡片發到飛書,可點按鈕、在輸入框填寫(最多 200 字)或直接回文字。
權限與安全¶
- 權限白名單
allowedOpenIds:只認指定 open_id;留空則誰都能用(README 建議自用也配一下)。 - 羣聊 @:默認
requireMentionInGroup=true,羣裏需 @ 機器人才響應;不 @ 也要響應時需開「獲取羣組中所有消息」並設requireMentionInGroup=false。
斜槓命令與身份¶
斜槓命令不進模型上下文:/new、/stop、/status、/cwd、/whoami、/help。
每條普通消息首行帶提問人來源摘要(如 【飛書 · 羣聊|單聊 · …】);詳細字段可通過飛書專用工具 feishu_identity 查詢。
僅在飛書發起的輪次裏可見的飛書工具包括:feishu_identity、feishu_send,以及審批相關 feishu_learn_approval_submit / feishu_learn_approval_status(審批定義號在插件「審批」分組配置)。
工作原理(概要)¶
飛書客戶端經長連接上報 im.message.receive_v1 → 插件內 FeishuBridge 做歸一化、去重、白名單與 per-session 串行隊列 → 斜槓命令本地處理,普通消息進入 AgentPool,由 DSH Agent 跑一輪,經 assistant-stream 更新 ReplyCard,工具 call/result 同步進「執行過程」面板。
長連接爲集羣模式、不廣播:同一
appId多條連接時事件隨機落到一條。一個飛書應用只應配一個 DSH 實例;多工作區請各建獨立應用。
環境要求¶
- Node.js >= 22
- DSH >= 0.2.1-rc.2,< 0.3.0
- 飛書企業自建應用,並開通 README 所列 IM、通訊錄(可選)等權限;事件訂閱方式爲使用長連接接收事件(含
im.message.receive_v1;選擇題需額外長連接訂閱card.action.trigger)。
國際版 Lark 將 domain 設爲 https://open.larksuite.com。
安裝與啓用¶
官方 README 給出的安裝方式如下(不要自行拼接未在文檔出現的 github:owner/repo 形式):
# 從本地目錄安裝(開發 / 自用)
dsh plugin --profile web add /absolute/path/to/dsh-plugin-feishu
# 發佈到 npm 之後
dsh plugin --profile web add dsh-plugin-feishu
插件自帶 cordis.patch.yml,安裝後在 bundle 中插入 id 爲 feishu 的插件行。
可選:將倉庫託管的插件索引添加爲 DSH 自定義索引源(插件頁 → 實驗性插件 → 自定義插件索引 → 發現 → 添加):
https://raw.githubusercontent.com/suveng/dsh-plugin-feishu/main/market/index.json
DSH 不內置索引源;索引由發佈者託管,安裝前自行判斷是否信任來源。
配置(三種方式)¶
優先級:界面 / 配置文件 > 環境變量。
推薦:側邊欄掃碼創建應用¶
側邊欄 飛書 →「掃碼創建應用」→ 飛書 / Lark 掃碼確認。應用自動創建並作爲機器人加入列表,插件即用該憑證連上。一個工作區可綁多臺機器人(多 App ID,各一條長連接);配置形態爲 bots: { "cli_xxx": { name, appSecret } }。
手動:App ID / App Secret¶
- 側邊欄飛書圖標 →「飛書 / Lark」表單,或插件頁 dsh-plugin-feishu →「飛書 / Lark 連接」卡片。
- 保存後插件自動斷開重連,無需重啓 dsh;連接狀態經
GET /api/feishu.status反映到界面(非「填了憑證就亮綠燈」)。
環境變量(密鑰不落地 profile 時):
export DSH_FEISHU_APP_ID=cli_xxxxxxxxxxxx
export DSH_FEISHU_APP_SECRET=xxxxxxxxxxxxxxxxxxxx
配置文件示例(改 profile 內 cordis 配置後需重啓 dsh):
- id: feishu
name: dsh-plugin-feishu
config:
appId: cli_xxxxxxxxxxxx
appSecret: xxxxxxxxxxxxxxxxxxxx
workdir: /home/me/work/my-repo
allowedOpenIds:
- ou_xxxxxxxxxxxxxxxx
常用配置項(完整表見 README):
| 配置項 | 默認值 | 說明 |
|---|---|---|
workdir |
跟隨最近一次 dsh 會話工作區 | 飛書會話建在哪個工作區;顯式填寫則固定 |
agentPreset |
本機 dsh 默認(如 ptc) |
決定飛書會話掛哪些工具 |
permissionPreset |
空(跟隨 dsh 默認) | 如 danger-full-access 關閉沙箱與審批;改配置後下一輪對話生效 |
allowedOpenIds |
[] |
空 = 不限制 |
requireMentionInGroup |
true |
羣聊是否必須 @ 機器人 |
streamIntervalMs |
700 |
卡片流式刷新間隔,不建議低於 200 |
progressMode |
steps |
執行過程:steps / action / off |
replyBodyMode |
final |
卡片正文:final 或 live |
approvalCode |
空 | 飛書審批定義號;未配置時審批工具明確失敗 |
執行過程、表情回執、引用展開等可在側邊欄 飛書 → 消息交互 分組裏改,保存後下一輪消息生效。
典型用法¶
- 按上文安裝插件並配置憑證(或掃碼),確認側欄飛書圖標爲已連接(綠點)。
- 在飛書單聊或羣裏 @ 機器人(若未改
requireMentionInGroup)發送任務描述;插件爲每個飛書會話維護 DSH Agent,workdir決定代碼與文件操作落在哪個目錄。 - 需要新開上下文時發送
/new;長任務可在卡片點「停止」或發/stop。 - 若使用
/learn等需人工把關的流程,可在插件配置approvalCode,由模型走飛書審批工具,拿到APPROVED後再動文件(具體審批定義需在飛書後臺準備)。
飛書側新建的會話使用 profile 的默認模型(agent-default-model);與網頁端是同一套 DSH 能力,只是入口在 IM。
適用場景與注意¶
適合:希望在飛書 / Lark 裏直接驅動本機 DSH Agent、看重流式卡片與工具過程可視化、且能接受企業自建應用(或掃碼創建)配置流程的開發者或小團隊自用。
務必注意:
- 插件在 當前 dsh 進程的權限下運行;
permissionPreset若設爲高權限預設,飛書一條消息即可觸發與本地終端等價的操作。安裝前應閱讀源碼與 MIT 許可證,並配置allowedOpenIds。 - 依賴 DSH 0.2.x 與 Node 22+,大版本升級宿主前需覈對
engines.dsh範圍。 - 社區目錄 skillhub.cn 與 DeepSeek / 幻方無官方從屬關係;DSH 生態是「一切皆插件」,索引與包裝由社區維護者自行發佈。
結尾¶
dsh-plugin-feishu 把飛書長連接、DSH Agent 與會話持久化收進一個 cordis 插件:少一層橋接進程,也少公網回調。若要試用,可從目錄頁瞭解分類與簡介,並按 README 安裝、配憑證後直接在飛書裏發消息驗證流式卡片與斜槓命令。