dsh-plugin-feishu-chat:在 dsh web 里直接查看飞书 bot 私聊记录的客户端插件

前言

如果你用 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.jsonexports. 入口 保留 ".": "./lib/index.js"
包被”凭空删除” 包放在了 npm/npx 缓存目录,被 GC 清理 放到 /root/.dsh/profiles/node_modules/(profile 自有目录)

其中”包必须放在 profile 自有目录”和”exports 保留 . 入口”这两点,手动安装时最容易踩,建议先核对再做。

适用场景与注意

这个插件适合的画像很明确:用 OpenClaw 独立网关服务飞书 bot、同时日常开着 dsh web 页面的开发者。它不改变对话发生的位置——飞书里该怎么聊还怎么聊,它只负责让记录在 web 页面上可见、可回看。

安装前有两点提醒:

1、插件以当前 dsh 进程的权限运行,安装前应检查源码与许可证。本项目许可证为 MIT,仓库公开,可以直接审阅 lib/index.jslib/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 / 幻方没有官方从属关系。

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

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

Xiaoye