前言¶
如果你用 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 / 幻方没有官方从属关系。