前言¶
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):
- 粘贴 App ID / App Secret,点「验证并保存」;
- 点「连接」,建立 WebSocket 长连接;
- 在飞书给机器人发消息后,在页面点「允许」,把 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