前言¶
在 DSH 里跑智能体任务时,常见做法是盯着桌面客户端或浏览器等 turn 结束。任务一跑久,或者 DSH 不在前台,就容易错过完成通知、运行失败(余额、限流、鉴权、Token 上限)以及审批、ask_user_question 等人机交互。把结果推到飞书群或私聊,再在飞书里回复继续同一会话,是更贴近日常协作的路径;若还要在飞书里用命令新建指定工作区的 DSH 会话,就需要 Host 侧插件把 DSH 事件、lark-cli 发消息和飞书 im.message.receive_v1 串起来。下面介绍社区插件 dsh-feishu-session-notify(维护者 Re-qi,分类:工作流),它实现 DSH 与飞书的双向协作,默认话题模式(混合):每条 DSH 会话的第一条输出进主聊天窗口作入口,后续输出回复进该话题;通知路径不调用模型、不消耗 Token。
这是什么¶
dsh-feishu-session-notify 是 DeepSeek Harness(DSH)的 Host 插件包(当前资料中版本 0.8.1,MIT 许可证)。一句话定位:用 lark-cli 把 DSH 助手输出、失败原因、审批与提问推到飞书 Markdown 消息,并按飞书消息与 DSH 会话的映射把话题内回复路由回对应会话;授权用户还可在飞书发送 /dsh 控制命令(例如列出工作区、在指定工作区新建会话)。
目录页:SkillHub 插件页
源码与说明:GitHub - Re-qi/dsh-feishu-session-notify
核心功能¶
DSH → 飞书¶
- DSH 每个完成的回复自动发到飞书;运行失败也会发错误通知(例如余额不足、限流、鉴权失败、达到最大 Token 限制)。
- 标题使用 DSH 当前会话名称;正文使用飞书 Markdown 富文本。
- 话题模式(默认混合):每个 DSH 会话的第一条输出发到主聊天窗口,作为该会话的话题入口;后续输出回复进由第一条创建的话题,点开入口消息可看到同一会话历史。
- DSH 的审批请求和
ask_user_question提问也会推到飞书,可直接在飞书里用数字或选项回复完成决策。 - 发送失败自动重试;话题回复失败时退回到新消息,避免静默丢消息;重启后会补发上次因退出而未送出的最终输出(详见 README 中的 Delivery guarantees)。
通知路径不调用 LLM,不消耗模型 Token;从飞书回复触发的 follow-up 会走正常 DSH 流程,可能消耗配置的模型与工具预算。
飞书 → DSH¶
- 飞书事件
im.message.receive_v1到达后,插件要求发送者与已认证用户一致。 - 对映射消息回复(或话题内任意消息回复),内容会作为 user follow-up 进入对应 DSH 会话;外层
```text围栏会被规范化处理。 - 非回复、且不能匹配已保存
message_id的普通消息会被忽略,避免误触其他会话。 - 授权用户发送以
/dsh开头的文本视为控制命令,在飞书内应答,不转发到 DSH 会话。
飞书内控制命令¶
| 命令 | 作用 |
|---|---|
/dsh workspaces |
列出各 DSH 工作区别名与绝对路径 |
/dsh new --workspace <别名> <任务> |
在指定工作区新建 DSH 会话,剩余文本作为首条用户任务 |
/dsh new 支持 --workspace demo 与 --workspace=demo 两种写法;工作区别名由 DSH workspaceRegistry 解析,不能通过消息指定任意文件系统路径。
环境与依赖¶
安装前需满足 README 所列条件:
- 已配置 DSH Host 插件 profile 的 Windows、macOS 或 Linux;
- DSH 进程可用的 Node.js / npm;
- 已安装并完成认证的 lark-cli;
- 具备发消息与接收
im.message.receive_v1的飞书应用 / 机器人;在开放平台启用该事件及 schema 要求的收消息权限。
可先检查 CLI:
lark-cli --version
lark-cli auth status
Bot 身份应为 ready;必要时:
lark-cli auth login --recommend
事件与权限可对照:
lark-cli event schema im.message.receive_v1
安装与启用¶
官方 README 说明:安装前应先查看当前 Host profile,保留已有 profile 配置,修改 Host 插件配置后需完全退出并重启 DSH(仅刷新浏览器不够)。下列命令示例使用 Windows 的 $DSH_HOME;其他平台请换成实际 DSH 主目录及路径写法。
1. 克隆插件源码¶
$DSH_HOME = Join-Path $env:USERPROFILE '.dsh'
New-Item -ItemType Directory -Force (Join-Path $DSH_HOME 'plugins-src') | Out-Null
git clone https://github.com/Re-qi/dsh-feishu-session-notify.git `
(Join-Path $DSH_HOME 'plugins-src/dsh-feishu-session-notify')
若目录已存在,改用 git pull。
2. 写入当前激活的 profile¶
从 DSH Host 启动参数确认当前 profile;标准 Desktop 常见路径为:
%USERPROFILE%\.dsh\profiles\desktop
在该 profile 的 package.json 中追加本地包依赖与 bundle(勿覆盖原有 dependencies / dsh.profile.bundles),路径须与本机克隆位置一致:
{
"dependencies": {
"dsh-feishu-session-notify": "link:C:/Users/123/.dsh/plugins-src/dsh-feishu-session-notify"
},
"dsh": {
"profile": {
"bundles": [
"dsh-feishu-session-notify"
]
}
}
}
若 profile 的包管理器无法可靠 link 本地包,可在 profile 的 cordis.patch.yml 增加 Host 直插(使用本机绝对路径):
- insert:
- id: feishu-session-notify
name: 'file:///C:/Users/123/.dsh/plugins-src/dsh-feishu-session-notify/lib/index.js'
3. 安装 profile 依赖¶
在 profile 目录执行:
pnpm install
若 profile 使用 npm,按该 profile 既有流程操作;勿删除 lockfile 或重装无关插件。
4. 重启 DSH¶
完全退出后重新打开 DSH。
验证与典型用法¶
验证安装¶
检查飞书事件消费者:
lark-cli event status
期望输出包含 Active consumers: 1 与 im.message.receive_v1。
插件诊断日志常见路径:
%USERPROFILE%\.dsh\feishu-session-notify.log
会话与飞书消息映射持久化文件:
%USERPROFILE%\.dsh\feishu-dsh-bindings.json
路由测试¶
- 让 DSH 完成一次真实任务;
- 在飞书中找到对应消息(首条在主窗口,后续在同一会话话题内);
- 直接回复该消息或话题内任意消息;
- DSH 应在映射会话中收到 follow-up。
从飞书新建会话¶
在飞书向已认证账号发送(示例):
/dsh new --workspace demo 修复登录测试
会在工作区 demo 创建新会话,确认消息成为该会话的话题根,任务文本作为首条用户消息。
审批与提问¶
插件以 prepend: true 监听 approval/request 与 user-questions/request,在飞书展示工具名、原因或选项;回复「1 / 2」或选项即可解析为 allowed-once / rejected 或结构化 answers,不调用模型。
话题模式与平铺模式¶
README 默认说明为话题模式(混合):主窗口保留入口,后续折叠进话题。若某类聊天不需要话题,可切换到平铺模式,细节见仓库 README 章节「Topic vs flat mode」。
适用场景与注意¶
适合:需要在飞书接收 DSH 完成与失败通知、在移动端或群聊里回复继续同一会话、在飞书处理 DSH 审批与提问、或远程用 /dsh new 在已知工作区开新任务的 DSH 用户。
务必注意:
- 插件在 当前 DSH 进程权限 下运行,安装前应自行审阅 GitHub 源码 与 MIT 许可证。
- 依赖 lark-cli 与飞书开放平台事件配置;映射与投递决策会写入上述 log 与
feishu-dsh-bindings.json,便于排查漏消息。 - SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系;安装方式以仓库 README 为准,资料中未提供
dsh plugin add github:...一类一键命令。
结尾¶
dsh-feishu-session-notify 把 DSH 会话输出、失败与交互请求同步到飞书,并把话题回复与控制命令接回 DSH,且通知链路不占用模型 Token。需要双向协作时,可按 README 克隆、写入 profile、安装依赖并重启 Host,再用 lark-cli event status 与一次真实任务验证路由。
- 目录页:https://www.skillhub.cn/plugins/Re-qi/dsh-feishu-session-notify
- GitHub:https://github.com/Re-qi/dsh-feishu-session-notify