dsh-feishu-channel:把 DSH 会话接到飞书手机上

前言

在 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,需企业租户):

  1. 开启机器人能力;
  2. 申请权限:im:message、im:message:send_as_bot、im:message.group_msg、im:chat:readonly;
  3. 发布版本并在企业内可用;
  4. 将机器人拉进群(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"
    }
  }
}

典型用法

  1. 完成飞书应用与本机 app.json、plugin.json 配置,启用插件并打开 enabled / taskEnabled(按需)。
  2. 在 DSH 工作区跑会话;turn/end 后飞书群收到标题、末段回答与目录。
  3. 在 DSH 当前会话执行 /feishu bind <chat_id>,之后在对应群发文本,约一个轮询周期内回投到绑定会话(或该工作区最近会话)。
  4. 排障:/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 仓库。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜