前言¶
把 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 安装、配凭证后直接在飞书里发消息验证流式卡片与斜杠命令。