前言¶
DeepSeek Harness(DSH)在 Web 桌面里处理智能体会话时,常会弹出 ask_user_question、工具审批,以及每轮结束后的状态摘要。人若不在浏览器前,就容易错过交互窗口。社区插件 dsh-telegram-relay(维护者 sflaer)在 DSH 主机侧挂一座 Telegram 桥:同一套问题与审批可同时出现在 Web UI 与 Telegram,谁先给出完整答复谁生效;另带本机 loopback 控制面板,用于配置 Bot、白名单与子代理通知。插件不改动模型 prompt,也没有独立客户端 UI,属于 DSH 生态里的「客户端」类扩展。
这是什么¶
Telegram Relay(包名 dsh-telegram-relay,当前版本 0.1.0,MIT 许可证)是面向 DeepSeek Harness 的 Telegram 桥接插件。加载后它会:
- 启动本机控制面板(默认
http://127.0.0.1:7810,端口占用时由系统分配,实际 URL 写入配置); - 通过 Telegram Bot 转发 agent 提问(内联按钮)、工具 Allow/Deny 审批、每轮结束的 turn summary,以及子代理相关通知(均可面板开关)。
答复可在 Telegram 或 DSH Web UI 任一侧完成,先完成的一侧获胜,另一侧会被标记为已解决。
核心功能¶
与 DSH 的衔接¶
插件订阅三条 seam(README 原文):
| Seam | 行为 |
|---|---|
user-questions/request(waterfall,prepend) |
把问题发到 Telegram 并等待答复,同时 next(),Web UI 仍可答题 |
approval/request(waterfall,prepend) |
发送 Allow/Deny 按钮,并继续交给 Web UI |
session/event(turn/end) |
为结束的回合生成摘要 |
子代理会话(session.header.origin === 'subagent')默认也会转发;面板里 Subagent messages 为总开关,其下 Completion messages、Questions(含子代理审批)默认均为开启。
Telegram 侧能力¶
- 传输方式为 long polling(
getUpdates),无需公网 IP、webhook 或 TLS 证书。 - 助手最终文本中的 Markdown 会渲染为 Telegram HTML(粗体、斜体、删除线、行内/围栏代码、链接、引用、标题、
||spoiler||等);文件夹/耗时/工具数行固定在摘要末尾。 - Bot 命令:
/start(绑定会话并显示状态)、/status、/help;开放问题时可直接用文字回复。
语言¶
控制面板与 Bot 面向用户的消息支持 俄语、英语、中文;选择保存在 $DSH_HOME/storages/telegram-relay/config.json 的 language 字段。未显式选择时跟随系统 locale(LC_ALL / LANG / JS locale);仅 ru、en、zh 受支持,其他系统语言回退到英语。已发送消息不会重译。
环境与依赖¶
- DSH 需启用
sessions服务(标准 Web 桌面 profile 已包含)。 - DSH 主机需能出站 HTTPS 访问
api.telegram.org(可走 DSH 全局代理)。 - 在 @BotFather 创建 Bot 并取得 token。
- 运行环境:
node>= 22.19.0,dsh>= 0.2.0(见package.json)。
安装与启用¶
Desktop profile(Electron 管理)¶
dsh plugin --profile desktop add 会被拒绝,需通过 GUI:
- 打开 DSH → 侧栏 Plugins → Add plugin。
- 填入 GitHub URL
https://github.com/sflaer/dsh-telegram-relay,或本地 checkout 的绝对路径。 - 安装并重启 DSH;管理器会自动写入
dsh.profile.bundles。
其他 profile(例如 web)¶
dsh plugin --profile web add github:sflaer/dsh-telegram-relay
本地链接安装:
dsh plugin --profile web add link:/absolute/path/to/dsh-telegram-relay
安装或更新 link 包后需重启对应 profile。
典型用法:面板与首次绑定¶
插件加载后,主机日志会出现类似:
[telegram-relay] control panel: http://127.0.0.1:7810
若 7810 被占用,实际端口见 $DSH_HOME/storages/telegram-relay/config.json 中的 panelUrl。
- 在浏览器打开上述控制面板 URL。
- 粘贴 Bot token,点击 Save。token 会写入 DSH 凭据存储(键名
TELEGRAM_RELAY_BOT_TOKEN,可用tokenEnv覆盖引用),并在config.json保留本地副本(权限0600),便于凭据服务晚于插件挂载时仍能重试启动。 - 在 Telegram 私聊 Bot 发送
/start,会话自动绑定。 - 使用 Send test 验证消息可达。
白名单:面板 Whitelist 可填 @username、t.me/username、数值 id、tg://user?id=… 等,逗号/空格/换行分隔。列表为空时,首个在私聊发送 /start 的用户成为 owner;非空时仅列表内用户可绑定与操作按钮,owner 始终有权限。若担心他人抢先绑定,应在 /start 前填好白名单。绑定群组时,成员可见通知,白名单仍限制谁可发消息与点按钮。
子代理通知:白名单下方 Subagent messages 为总开关;开启后 Completion messages、Questions 分别控制完成摘要与问答(含子代理审批)。
配置项(cordis.patch.yml)¶
在 profile 的 cordis.patch.yml 中编辑已有 telegram-relay 行,勿重复添加:
- id: telegram-relay
config:
port: 7810
language: en
notifyTurnEnd: true
notifyQuestions: true
notifyApprovals: true
notifySubagents: true
notifySubagentTurnEnd: true
notifySubagentQuestions: true
summaryMaxChars: 1500
minTurnMs: 0
常用字段:port(面板端口)、language(ru/en/zh)、各类 notify* 开关、summaryMaxChars(摘要正文上限,默认 1500)、minTurnMs(短于该毫秒的回合不推摘要)、apiBase(默认 https://api.telegram.org)、tokenEnv(默认 TELEGRAM_RELAY_BOT_TOKEN)。token、chat id、owner、白名单、语言与 update 游标均存于上述 config.json,不应把 token 写进 cordis.patch.yml。
适用场景与注意¶
适合需要在手机 Telegram 上响应 DSH 提问与工具审批、并接收回合与子代理通知的开发者或运维。loopback 面板带 per-process CSRF 保护,仅服务本机配置。
插件以 当前 DSH 进程权限 在主机侧运行,可访问会话事件并向 Telegram 出站;安装前请自行审阅 源码与 MIT 许可证,并确认 Bot token 与白名单策略符合你的安全要求。
DSH 社区插件目录站点 skillhub.cn 与 DeepSeek / 幻方无官方从属关系;生态理念是「一切皆插件」,本插件是其中一条可选的客户端扩展。
结尾¶
dsh-telegram-relay 把 DSH 的交互 seam 延伸到 Telegram,并与 Web UI 并行、先到先得,同时用本机面板集中管理 token、语言、白名单与子代理通知。更完整的架构与问答/审批竞态说明见仓库内 visual guide。