DeepSeek Harness 的飞书/Lark 私聊桥接插件,支持 `dsh plugin add` 一键安装,配套完整调试文档。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:itr-del/dsh-feishu
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
可插拔 cordis 插件,把飞书自建机器人接入运行中的 DeepSeek Harness (dsh)
webprofile —— 通过dsh plugin add一行安装。
┌────────┐ WS ┌──────────────┐ cordis ┌──────────┐ LLM ┌──────────┐
│ 飞书 IM │ ──────> │ 本插件 │ ──────────> │ dsh agent │ ────────> │ DeepSeek │
│ │ <────── │ │ <────────── │ │ <──────── │ │
└────────┘ API └──────────────┘ events └──────────┘ stream └──────────┘

功能
- 一个飞书私聊用户 ↔ 一个持久化 dsh 会话(
feishu:<open_id>)。 - 多轮对话跨重连保持。
- 把助手回复流回飞书,4000 字分块。
- 过滤 DeepSeek
<|DSML|...>工具调用标记。 - 交互式提问桥接:模型调用
ask_user_question时,问题(含选项)会被渲染成文本发到飞书, 并立刻解开死锁 —— 否则在纯 IM 部署下这个工具会一直挂到超时(它只接受 dsh web 浏览器端的回答)。 - 进度回传:turn 跑超过 45 秒还没结束,就每 30 秒把新产出的正文增量发一次「进行中」消息。 长任务不再全程静默。
- 超时看门狗:turn 卡死时强制
agent.cancel()并通知用户,阈值可配(默认 30 分钟)。 - 纯 ESM,无需 TypeScript 编译。
- 无遥测、完全本地。
安装
1. 安装 dsh
npm install -g @deepseek-ai/dsh
dsh web --help
2. 安装本插件
dsh plugin add dsh-feishu
会自动装到 ~/.dsh/profiles/web/node_modules/dsh-feishu 并写入 cordis.patch.yml。
3. 配置飞书应用
到 https://open.feishu.cn/app 创建自建应用,复制 appId + appSecret。
在事件与回调里:
- 订阅方式选使用长连接接收事件/回调。
- 添加事件
im.message.receive_v1。
在权限里授予:
im:messageim:message.p2p_msg(私聊必需)
发布版本 —— 没发布就收不到事件。发布后等约 2 分钟缓存刷新。
4. 导出环境变量并启动
export DEEPSEEK_API_KEY="sk-..."
export FEISHU_APP_ID="cli_..."
export FEISHU_APP_SECRET="..."
dsh web
日志里应该看到:
[feishu] WebSocket started (appId=cli_xxx)
[feishu] FeishuBridgeService initialized
给机器人发私聊消息,agent 会在同一会话里回复。
环境变量
| 变量 | 必需 | 默认 | 备注 |
|---|---|---|---|
DEEPSEEK_API_KEY |
是(LLM 调用) | — | https://platform.deepseek.com |
DEEPSEEK_BASE_URL |
否 | https://api.deepseek.com |
代理场景 |
FEISHU_APP_ID |
是 | — | 应用控制台里的 cli_xxx |
FEISHU_APP_SECRET |
是 | — | 应用控制台 —— 切勿提交 |
DSH_FEISHU_WATCHDOG_TIMEOUT_MS |
否 | 1800000(30 分钟) |
turn 卡死的强制取消阈值 |
DSH_FEISHU_PROGRESS_AFTER_MS |
否 | 45000 |
本轮跑多久之后才开始发进度更新 |
DSH_FEISHU_PROGRESS_INTERVAL_MS |
否 | 30000 |
相邻两条进度更新的最小间隔 |
消息流
- 用户私聊机器人。
- 飞书 SDK 触发
im.message.receive_v1→ 本插件。 - 插件为
feishu:<open_id>加载/创建 agent。 - 插件调用
agent.followup(userMessage)。 - agent 回到
idle后,插件读取agent.session.events,过滤 DSML 噪声,通过larkClient.im.message.create(...)把回复发回飞书。 - turn 进行期间,一个 2 秒轮询的看门狗负责两件事:发现未结算的
ask_user_question调用 就把它转投到飞书并取消该轮(解死锁);turn 超过阈值就把正文增量作为「进行中」消息发出。ask_user_question与最终回复共用同一个 seq 游标,所以同一段文字不会发两遍。
限制
- 仅文本。图片/文件/卡片/post 消息未处理。
- 非增量 token 流式。回复仍按整段发送;turn 进行中只有周期性「进度更新」(见上)。
- 暂不支持群聊。仅私聊。
- 交互式 UI 工具降级:
ask_user_question/exit_plan_mode在 dsh 里只接受 web 端回答。 IM 场景下插件会把问题转成文本并取消该轮(同时注入环境约束,让模型优先直接用正文提问)。
协议
MIT。
致谢(第三方来源)
- DeepSeek Harness (dsh) —— 本插件所扩展的 Agent 运行时。
- @larksuiteoapi/node-sdk —— 飞书官方 SDK,MIT 协议。
- DeepSeek API —— 大模型后端。
作者
itr-del — 13918029394@163.com
在 Ubuntu 22.04 上集成 dsh 与自托管飞书机器人过程中编写。
English docs: README.md。
链接
同类插件
xmanrui/dsh-im★ 1518
通过二维码或机器人凭据将 IM 机器人接入 DeepSeek Harness(支持飞书、微信、钉钉、企业微信、QQ、Slack、Telegram、Discord 和 WhatsApp 共 9 种渠道)。
shaobeichen/dsh-pocket★ 1381
手机远程访问 DSH Web 界面:扫码即用局域网或公网(cloudflared 隧道)访问,实时同屏、移动端适配布局,带设置页管理。
inclusionAI/Avernet#deepseek-harness-channel-bcn★ 572
通过 WebSocket V2 将 DeepSeek Harness 接入 Avernet Bot 协作网络,支持自动注册、Agent 会话隔离、工具调用事件和多 Bot 路由工具。
omdsh-dev/dsh-notification★ 85
回合完成桌面通知,按结果分控 + 关键词过滤。
whyihaveyou/dsh-suite#plugin-notify★ 57
回合完成、错误或待审批时推送 IM webhook(飞书/企微/钉钉/Slack/Discord/自定义)与本地通知。
omdsh-dev/dsh-lark★ 55
DeepSeek Harness 的飞书/Lark 机器人渠道:每个会话驱动独立 agent,工具审批、模型提问与计划审阅都以卡片回到聊天,点按钮或直接回复即可作答;聊天里用 `/cd`、`/model`、`/new` 切工作区、换模型、重开会话,多个机器人各自独立并可在同群交接回合。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。