前言¶
DSH(DeepSeek Harness)默认在网页上与智能体交互。在终端受限或只能通过移动端访问的环境里,把指令与结果搬到 IM 渠道会更方便。drliuhuan/dsh-plugin-feishu-im 插件提供了飞书 IM 通道:通过扫码创建专属飞书应用,把任务进展、审批请求和问题推送到飞书,并在飞书里直接指挥 DSH。
插件信息¶
- 名称:dsh-plugin-feishu-im
- 维护者:drliuhuan
- 分类:客户端
- 版本:1.16.0
- 许可证:MIT
安装与启用¶
# 从 npm 安装(推荐)
plugin_manager install_bundle dsh-plugin-feishu-im
# 或者
npm i -g dsh-plugin-feishu-im
装好后进入 DSH Web 的「设置 → 飞书 IM」即可开始配置。
核心能力¶
- 连接:支持通过二维码扫码创建专属飞书应用(自动带消息权限),也支持手动填写 App ID / App Secret。
- 任务通知:会话一轮结束时推送卡片,包含结论与用时;失败时附上原因。
- 审批:工具需要授权时推送卡片,选择「允许一次 / 拒绝」后继续执行。
- 提问:
ask_user_question的选项变成按钮,也可点「输入你的答案」用文字回答。 - 进度:收到消息后在消息上打 Typing 反应,处理完撤掉,失败时显示 CrossMark。
- 指挥:在飞书里发消息,DSH 会话执行后结果回传到同一对话。
- 插话:任务还在跑时再发消息,默认作为插话引导并入当前这一轮(不排队),可改用
/queue排队。 - 会话列表与切换:
/sessions [关键字]或/history列会话并切换;/resume <编号|id|标题>切换;/current查看当前绑定;/new开新会话。 - 会话位置:新建会话建在可配置的文件夹(默认
~/dsh-plugin-feishu-im),工作区名默认「飞书IM」。 - 权限模式:每个飞书对话可选四种模式:只读 / 工作区读写 / Auto Review / 完全权限。
- 卡片渲染:消息以卡片 JSON 2.0 发送,标题、引用、代码块都能渲染;表格用原生 table 元素(表头纯色、行高紧凑),超长按段分页不截断。
部署为服务(无需 sudo)¶
设置页「部署方式」可以把 DSH 装成用户级 systemd 服务(~/.config/systemd/user/dsh.service,Restart=always),全程不需要 sudo。Windows 下该选项禁用并提示「当前仅支持 Linux(用户级 systemd)与 macOS(launchd)」。安装前会检测是否已托管系统级或用户级服务,避免冲突。
连接飞书¶
- 扫码创建(推荐):点「生成连接二维码」,用飞书手机端扫码,按提示确认创建。飞书使用开放平台的设备码注册流程(
archetype=PersonalAgent),创建出的应用已带消息权限。 - 手动填写:已有应用时直接填 App ID / App Secret,但需在飞书开放平台开启「机器人」能力,配置权限(
im:message、im:message:send_as_bot、im:resource、im:chat)、事件(im.message.receive_v1)与回调(card.action.trigger),并发布一个应用版本。
指挥与询问策略¶
审批与提问默认只走飞书;打开「网页与飞书同时询问」会恢复并行。飞书等待上限为 1–120 分钟或「永不超时」,超时后卡片失效并转回 DSH 网页。
会话管理命令¶
/sessions [关键字]、/history:列会话并切换。/resume <编号|id|标题>:切换当前会话。/current:查看当前绑定。/new:开一个新会话。/queue <内容>:排队处理,不插话。/permission、/mode:查看并切换本对话的权限模式。/restart:重启 DSH(有任务在跑时拒绝并说明)。/stop:让当前会话停下。/id:当前会话 id。/help:命令说明。
会话权限¶
| 模式 | 沙箱 | 审批 | 说明 |
|---|---|---|---|
| 只读 | read-only |
询问 | 只能读;越界操作会来问你 |
| 工作区读写 | workspace-write |
询问 | 工作区内可读写;越界要你确认 |
| Auto Review | 由 Auto Review 决定 | 裁决 | 优先使用宿主的 dsh-experimental-auto-review;没有时退回「只读 + 插件按文本判断」的兜底 |
| 完全权限 | danger-full-access |
不再询问 | 不做沙箱限制,也不再打扰你 |
切换权限先发一张带四种模式的卡片,再弹确认卡片,点「确认修改」才生效。
安全模型¶
- App Secret 只存在
<DSH_HOME>/feishu-im/state.json,权限0600,不回传浏览器、不写进cordis.patch.yml。 - 设置页接口是 DSH 的 exact Fetch 路由(
/api/feishu-im/*),只有本机已认证的 owner 浏览器能访问。 - 飞书侧按
open_id允许列表过滤;列表为空时接受第一个来消息的人并设为唯一使用者。 - 关闭「允许在飞书里指挥 DSH」后,飞书只收通知,不接指令。
- 危险操作仍走 DSH 的审批策略;卡片只是把同一次请求搬到手机上回答。
- 同一个飞书应用不要在别处同时开长连接(飞书会把事件随机投给其中一条)。
排障¶
打开宿主追踪(默认关闭,也可 touch <DSH_HOME>/feishu-im/trace.on 运行时打开):
DSH_FEISHU_IM_TRACE=1 dsh web
日志在 <DSH_HOME>/feishu-im/host-probe.log。
开发与测试¶
- 测试脚本:
scripts/tool-schema.mjs、scripts/inbound-smoke.mjs、scripts/target-smoke.mjs、scripts/permissions-smoke.mjs、scripts/permission-flow-smoke.mjs、scripts/answers-smoke.mjs、scripts/sessions-smoke.mjs、scripts/session-card-smoke.mjs、scripts/service-smoke.mjs、scripts/table-card-smoke.mjs、scripts/render-smoke.mjs。 - npm scripts:
test、test:render、test:live、test:timeout。
适用场景与注意¶
适合在终端受限、只能通过网页或 IM 访问的环境下使用 DSH。安装前建议检查源码与许可证(MIT)。插件以当前 DSH 进程权限运行,注意权限与安全配置。
总结¶
dsh-plugin-feishu-im 让 DSH 的会话管理、任务通知、审批与提问都能在飞书里完成,并通过权限模式与安全模型控制风险。通过目录页与 GitHub 仓库可以查看更多细节。