前言¶
在 DeepSeek Harness(DSH)里跑长任务时,人往往在电脑前等着这一轮 turn/end。会话完成或出错若没有及时看见,就要反复切回桌面端看状态。邮件、通用 IM 机器人或自建 webhook 能做通知,但把「群里一句话」准确投回某个工作区里正在跑的那条会话,还要避免公网回调、备案和 serverless,就得单独接一套通道。
下面介绍社区插件 dsh-feishu-channel(维护者 zxlbxx,分类:客户端):用飞书 / Lark 企业自建应用,把桌面上的会话结果推到手机,并把群里的文本消息回投到对应工作区会话继续执行。插件以 npm 包形式发布,当前版本 0.4.0,许可证 MIT,要求 Node >=20.3,DSH 兼容范围为 >=0.2.0-rc.1 <0.3.0-0(见仓库 package.json)。
这是什么¶
一句话定位:DSH ⇄ 飞书/Lark 双向通道——只依赖飞书开放平台自建应用,凭据留在本机,不需要公网回调地址、serverless 或备案。
仓库:https://github.com/zxlbxx/dsh-feishu-channel
社区目录:https://www.skillhub.cn/plugins/zxlbxx/dsh-feishu-channel
SkillHub 等目录是社区站点,与 DeepSeek / 幻方无官方从属关系;安装前建议自行查看源码与许可证。插件在 当前 DSH 进程权限 下运行,能读写的路径与 DSH 一致。
核心功能¶
能力按方向划分如下(与 README 能力表一致)。
桌面 → 手机¶
- 监听会话事件流中的
assistant/message与turn/end,在会话 完成(done) 或 出错(error) 时推送:标题、最后一段回答、工作区目录。不额外调用模型。 - 推送受
~/.dsh/feishu/plugin.json中enabled、events、minIntervalSec控制;默认可关闭推送,避免与其他通知插件重复发送。 - 可选:在
~/.dsh/notify/config.json配置routing,按工作区目录前缀把通知发到不同群。
手机 → 桌面¶
- 按
taskPollSeconds(默认 15 秒)轮询群消息,将文本投递到该群绑定的会话;无绑定时投到该工作区 最近更新的会话。 - DSH 内命令:
/feishu bind <chat_id>:把当前会话绑定到指定群;/feishu spawn [目录] [任务]:新建受管会话并投递任务(实验性,依赖 DSH 内部 API);/feishu doctor:自检;/feishu test:发送测试消息。
手机侧消息通过 agent.followup() 投递,来源标记为 dsh-feishu-channel。
运行形态¶
- 插件在桌面版 profile 中加载,注入
agents、workspaceRegistry、sessionController;headless profile 无这些服务时插件会停在pending,属正常。 - 仅与
open.feishu.cn通信;包内不含凭据,运行时从~/.dsh/feishu/app.json读取。
安装与启用¶
插件在 DSH 桌面版「插件」页安装,或使用命令行(须与文档一致,勿自行拼接 GitHub 地址安装串):
# 方式一:插件市场里搜索 dsh-feishu-channel
# 方式二:命令行
dsh plugin add dsh-feishu-channel
安装后在插件页确认 dsh-feishu-channel 已启用,重启或刷新 DSH 桌面端。
配置步骤¶
1. 飞书自建应用¶
在 飞书开放平台 创建 企业自建应用(README 注明:个人版租户可能报 21001 Access denied due to platform policy,需企业租户):
- 开启机器人能力;
- 申请权限:
im:message、im:message:send_as_bot、im:message.group_msg、im:chat:readonly; - 发布版本并在企业内可用;
- 将机器人拉进群(
im/v1/chats只列群,不列单聊)。
2. 本机凭据与插件开关¶
创建 ~/.dsh/feishu/app.json,建议权限 600:
{
"app_id": "cli_xxxxxxxxxxxxxxxx",
"app_secret": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"chat_id": "oc_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
~/.dsh/feishu/plugin.json 示例:
{
"enabled": true,
"minIntervalSec": 60,
"events": ["done", "error"],
"taskEnabled": true,
"taskPollSeconds": 15,
"tasks": {}
}
字段含义:enabled 控制是否推送会话结果(默认 false);events 为 done / error;minIntervalSec 为同一会话两次推送的最小间隔;taskEnabled 控制是否轮询群消息并投递;tasks 由 /feishu bind 维护,一般无需手改。
3. 工作区路由(可选)¶
~/.dsh/notify/config.json 可同时配置默认群、routing(桌面 → 手机按目录路由)和 task.chats(群 → 工作区,用于「最近会话」兜底):
{
"feishu": { "chat_id": "oc_默认群" },
"routing": [
{ "match": "/Users/me/work/project-a", "chat_id": "oc_项目A群", "name": "project-a" }
],
"task": {
"chats": {
"oc_项目A群": "/Users/me/work/project-a"
}
}
}
典型用法¶
- 完成飞书应用与本机
app.json、plugin.json配置,启用插件并打开enabled/taskEnabled(按需)。 - 在 DSH 工作区跑会话;
turn/end后飞书群收到标题、末段回答与目录。 - 在 DSH 当前会话执行
/feishu bind <chat_id>,之后在对应群发文本,约一个轮询周期内回投到绑定会话(或该工作区最近会话)。 - 排障:
/feishu doctor、/feishu test。
投递优先级:显式 bind → 该工作区最近更新的会话。
适用场景与注意¶
适合谁:已在用 DSH 桌面版、企业飞书/Lark 租户、希望「离席也能收结果、手机上续一句」的开发者。多项目可把不同工作区前缀路由到不同群。
限制(README 已知限制):
- 只能投递到桌面端已存在的会话;须先在工作区创建过会话(DSH 索引机制)。
/feishu spawn为实验能力,不同 DSH 版本可能失效。- 群消息为约 15 秒一次轮询,飞书侧有频率限制;仅支持文本,图片、文件、卡片会被忽略。
安全:app_secret 等同密码,泄露后在开放平台重置;建议机器人只进必要群。
结尾¶
dsh-feishu-channel 把会话生命周期绑在飞书群上:桌面 turn/end 上屏,手机文本经 followup 回到工作区。安装命令为 dsh plugin add dsh-feishu-channel。详情见 SkillHub 目录页 与 GitHub 仓库。