dsh-channel-hub:用飞书长连接远程驱动本机 DSH

前言

DeepSeek Harness(DSH)的 agent 通常跑在本机或桌面环境里:改代码、跑命令、走审批,都在同一台机器上完成。人离开电脑时,若仍想用手机发一句话让 agent 继续干活,并把进度、长输出和权限确认收回到聊天窗口,就需要一条「IM → DSH 会话」的通道。

常见做法是自建回调服务、内网穿透或独立桥接进程,对没有公网 IP 的环境并不友好。维护者 Warrenz23 的 dsh-channel-hub(分类:客户端)走另一条路:利用飞书官方 WebSocket 长连接,由本机主动连出,事件沿连接回传,无需公网 IP、无需 ngrok。插件当前在 GitHub 上星标为 0,版本 0.2.0,许可证 MIT;社区目录页见 SkillHub 条目,源码与文档在 GitHub 仓库。

下面介绍它是什么、能做什么,以及如何安装与启用。

这是什么

dsh-channel-hub 把飞书(Lark)变成 DSH 的远程控制台:在手机上对机器人说一句话,本机 DSH agent 开始执行;进度、审批、长输出在飞书聊天里完成。

架构上,飞书客户端经官方 API 的长连接接到插件,插件再对接本机 DSH 的会话、工具与审批。README 用一句话概括:不需要公网 IP,不需要内网穿透,不需要独立桥接进程。

装好后插件自带 DSH 技能 feishu-channel。你可以直接对 agent 说「帮我连接飞书」「飞书机器人不回我了」「换个飞书应用」,agent 会按顺序调用 CLI(均支持 --json 与退出码),例如:

node bin/cli.mjs status --json
node bin/cli.mjs setup --app-id … --app-secret …
node bin/cli.mjs allow feishu:oc_…

核心功能

以下能力均来自仓库 README 与 package.json 描述,未在资料中出现的细节不写。

能力 说明
图形化控制台 浏览器填凭证 → 点连接 → 一键授权,不必手改 JSON、不必为配置再重启一次
聊天即会话 一个飞书聊天窗口对应一个 DSH 会话,重启后可接上历史
图片 / 语音 / 文件 图片经宿主准入成为 durable 附件;语音有转写则转文字,否则存音频并告知 agent;PDF 等按附件转交
进度与长输出 「会变大」的卡片:从「已收到」长到最终答案;长输出按段落切分,不切断代码块
审批与提问 agent 要权限时推送带按钮的审批卡,也可在聊天里用 /approve / /deny 或回 1 / 2;ask_user_question 可变为可点选择卡
聊天命令 /new /status /stop /approve /deny /id /help,不消耗模型回合
可靠性 平台重投去重、同窗口严格串行、出站失败进磁盘队列并指数退避
默认安全 白名单为空则谁都不回;未授权用户只收到引导

内核与平台解耦:会话路由、串行队列、回合等待、审批竞速、出站重试在内核;飞书适配器主要实现 sendText / sendCard / updateCard 与入站回调。README 明确:不做个人微信(无官方机器人 API;参考实现走逆向协议有封号风险)。

运行环境:Node >= 22.13.0;依赖 @larksuiteoapi/node-sdk。

安装与启用

1. 飞书侧准备(摘要)

在 飞书开放平台 创建企业自建应用,开启机器人能力,记录 App ID 与 App Secret。开通权限(含 im:message、im:message:send_as_bot、im:resource 等)、事件订阅选 使用长连接接收事件,订阅 im.message.receive_v1 与 card.action.trigger,并发布应用。完整勾选表见仓库 docs/quickstart.md。

2. 装进 DSH

有 dsh 命令行时(README 原文):

dsh plugin add /path/to/dsh-channel-hub   # 本地目录
dsh plugin add dsh-channel-hub            # 已发布到 npm
dsh plugin add github:you/dsh-channel-hub # GitHub

无 dsh CLI 或桌面版直接给文件夹时,在插件目录执行(Node 22.13+):

node bin/install.mjs

脚本会(幂等):复制到 ~/.dsh/profiles/desktop/node_modules/dsh-channel-hub、向 ~/.dsh/profiles/desktop/cordis.patch.yml 插入一行、生成 ~/.dsh/channel-hub/config.json 模板。两条安装路线只选一条即可。

3. 控制台三步

重启 DSH 让插件加载,然后:

node bin/cli.mjs ui

在 Edge/Chrome 应用窗口打开 http://127.0.0.1:17867/?token=...(默认端口 17867,仅监听 127.0.0.1):

  1. 粘贴 App ID / App Secret,点「验证并保存」;
  2. 点「连接」,建立 WebSocket 长连接;
  3. 在飞书给机器人发消息后,在页面点「允许」,把 peer 写入白名单。

凭证与开关写入 ~/.dsh/channel-hub/config.json;优先级为 环境变量 > config.json > cordis.patch.yml。白名单键 security.allowPeers:空数组表示谁都不回。

日常体检:

node bin/cli.mjs doctor

典型用法

  • 远程发任务:授权后的飞书窗口里,除命令外的文字都会交给 agent;工作目录由 agent.cwd 控制,换目录用 /new。
  • 看状态与中断:/status 查看会话与队列;/stop 中断当前轮次。
  • 配白名单:聊天里 /id 看 peer id,或控制台点「允许」,或 node bin/cli.mjs allow feishu:oc_xxx。
  • 环境变量(资料中列出的部分):DSH_HUB_FEISHU_APP_ID、DSH_HUB_FEISHU_APP_SECRET、DSH_HUB_FEISHU_MODE、DSH_HUB_CWD、DSH_HUB_ALLOW_ALL=1、DSH_HUB_STATE_DIR 等。

数据目录 ~/.dsh/channel-hub/ 含 config.json、sessions.json、outbox.json、日志与可选 journal/。删掉 sessions.json 不会删除 DSH 内会话,仅下次会新开映射。

适用场景与注意

适合谁:已在用 DSH 桌面/本机 agent,希望用飞书手机或桌面端远程触发任务、收进度、在 IM 里点审批,且不想维护公网回调或穿透的人。

务必知晓:

  • 插件以 当前 DSH 进程的权限 运行 agent 与工具;安装前请自行阅读源码与 MIT 许可证,确认凭证与白名单策略可接受。
  • 控制台与 /api/* 带 token,仅本机管理面,不是公网服务。
  • 群聊默认 groupMentionOnly: true,需 @ 或提到助手才响应;security.allowAll 不建议在群聊开启。
  • 语音转写依赖宿主可选服务;桌面版默认 profile 可能无 speechToText,会退回音频附件模式。
  • DSH 生态理念是「一切皆插件」;SkillHub 为社区目录,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-channel-hub 用飞书长连接把 IM 和本机 DSH 接在一起:无公网 IP 也能收事件,可视化配置与白名单、进度卡与审批卡把远程协作收进一个聊天窗口。更细的 10 分钟清单见仓库 docs/quickstart.md,分发与上架见 docs/distribute.md。

  • 目录页:https://www.skillhub.cn/plugins/Warrenz23/dsh-channel-hub
  • GitHub:https://github.com/Warrenz23/dsh-channel-hub
羽毛球分组比赛记分
小程序二维码

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

小夜