前言¶
如果你用 OpenClaw 獨立網關(openclaw gateway --profile dsh)來服務飛書 bot,會遇到一個具體的問題:你與 bot 的對話記錄只存在於網關寫入的 agent 會話文件裏,dsh web 的頁面看不到。想回看一段對話,要麼登服務器翻文件,要麼自己寫腳本解析。
dsh-plugin-feishu-chat 解決的就是這件事:它把會話文件裏的記錄鏡像到 dsh web 頁面上,提供一個帶自動刷新的查看面板。下面介紹它的功能、原理和安裝方法。
這是什麼¶
dsh-plugin-feishu-chat(包名 dsh-feishu-chat-viewer,版本 1.0.0)是一個給 DeepSeek Harness Web(dsh web)用的客戶端插件,由 scubiry-glitch 維護,許可證爲 MIT。它在會話頭部操作區增加一個 💬 飛書 按鈕,點擊彈出面板,即時展示你與飛書 bot 的私聊記錄。
數據流向是這樣的:
飛書 ←長連接→ OpenClaw 獨立網關 (agent dsh)
│ 對話寫入
▼
agent 會話文件 sessions/*.jsonl
│ 讀取(node 半身,同源路由)
▼
dsh web ──/feishu-chat.json──▶ 瀏覽器面板(客戶端插件)
核心功能¶
- 在會話頭部操作區增加 💬 飛書 按鈕,點擊彈出面板展示與飛書 bot 的私聊記錄;
- 面板每 5 秒自動刷新,按鈕帶消息數角標(角標 30 秒刷新);
- 數據來自 OpenClaw 獨立網關寫入的 agent 會話文件
sessions/*.jsonl; - 不依賴 OpenClaw 網關進程存活,只要會話文件在,歷史記錄就能看;
- 面板展示完全不受網關模型配置影響:模型不可用時只是 bot 不再產生新回覆,網關進程崩潰也不影響已落盤的會話文件;
- 通過同源路由訪問,無論頁面通過
127.0.0.1:3080、局域網還是 Cloudflare 隧道打開,都不會有跨源/CSP 問題。
工作原理¶
插件本體跑在 dsh web 裏,分成兩個半身:
1、node 半身在 dsh web 進程內註冊同源路由 /feishu-chat.json,負責讀取 agent 會話文件並返回數據;
2、瀏覽器半身負責渲染面板,直接請求同源的 /feishu-chat.json 拿數據。
因爲是同源路由而不是外掛的獨立端口,瀏覽器側不會碰到跨源限制,這是它能在各種訪問方式下穩定工作的關鍵。反過來,如果用了跨源地址(比如硬編碼 127.0.0.1:18791),面板會報 Failed to fetch。
安裝與啓用¶
官方提供一鍵腳本安裝,先克隆倉庫,再執行安裝腳本,最後重啓 dsh web:
git clone https://github.com/scubiry-glitch/dsh-plugin-feishu-chat.git
cd dsh-plugin-feishu-chat
./install.sh # 安裝到 /root/.dsh/profiles/ 並寫入 cordis.patch.yml
pm2 restart dsh-web # 重啓後刷新頁面
如果不想用腳本,也可以手動安裝,分三步:
# 1. 把包放進 web profile 的 node_modules(真實目錄,勿放 npx 緩存目錄!)
mkdir -p /root/.dsh/profiles/node_modules/dsh-feishu-chat-viewer/lib
cp -r lib package.json /root/.dsh/profiles/node_modules/dsh-feishu-chat-viewer/
然後在 /root/.dsh/profiles/web/cordis.patch.yml 追加:
- insert:
- id: feishu-chat-viewer
name: 'dsh-feishu-chat-viewer'
最後重啓:
pm2 restart dsh-web
經過上面的步驟,刷新頁面即可在會話頭部看到 💬 飛書 按鈕。插件依賴 dsh-auth-gate 0.7.2(見 package.json)。
配置¶
三個可調項:
| 項 | 位置 | 默認值 |
|---|---|---|
會話目錄 SESS_DIR |
lib/index.js 頂部常量 |
/root/.openclaw-dsh/agents/dsh/sessions |
| 刷新間隔 | lib/client.js |
面板 5s / 角標 30s |
展示條數 MAX_MSGS |
lib/index.js |
100 |
如果你的獨立網關用了別的 profile 名,改 SESS_DIR 指向對應目錄即可。
故障排查¶
幾個常見症狀和處理方式:
| 症狀 | 原因 | 處理 |
|---|---|---|
| 插件按鈕不出現 | 頁面緩存了舊 bundle | 強刷(Cmd/Ctrl+Shift+R);確認 window.__DSH_BOOT__ 裏有插件 id |
面板顯示 Failed to fetch |
用了跨源地址 | 必須用同源 /feishu-chat.json |
啓動崩潰 ERR_PACKAGE_PATH_NOT_EXPORTED |
package.json 的 exports 缺 . 入口 |
保留 ".": "./lib/index.js" |
| 包被”憑空刪除” | 包放在了 npm/npx 緩存目錄,被 GC 清理 | 放到 /root/.dsh/profiles/node_modules/(profile 自有目錄) |
其中”包必須放在 profile 自有目錄”和”exports 保留 . 入口”這兩點,手動安裝時最容易踩,建議先覈對再做。
適用場景與注意¶
這個插件適合的畫像很明確:用 OpenClaw 獨立網關服務飛書 bot、同時日常開着 dsh web 頁面的開發者。它不改變對話發生的位置——飛書裏該怎麼聊還怎麼聊,它只負責讓記錄在 web 頁面上可見、可回看。
安裝前有兩點提醒:
1、插件以當前 dsh 進程的權限運行,安裝前應檢查源碼與許可證。本項目許可證爲 MIT,倉庫公開,可以直接審閱 lib/index.js 和 lib/client.js;
2、手動安裝時嚴格按上面的路徑放置包,避免被 GC 清理或啓動報錯。
結尾¶
dsh-plugin-feishu-chat 做的事不復雜:把 OpenClaw 獨立網關落盤的會話文件,通過同源路由鏡像到 dsh web 頁面上,配一個自動刷新的面板。它體現了 DSH「一切皆插件」的思路——頁面能力缺口,用一個客戶端插件補上即可。
- 目錄頁:https://www.skillhub.cn/plugins/scubiry-glitch/dsh-plugin-feishu-chat
- GitHub:https://github.com/scubiry-glitch/dsh-plugin-feishu-chat
需要說明的是,skillhub.cn 是獨立的社區插件目錄,與 DeepSeek / 幻方沒有官方從屬關係。