dsh-telegram-relay:把 DSH 问答、审批与回合摘要接到 Telegram

前言

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 受支持,其他系统语言回退到英语。已发送消息不会重译。

环境与依赖

  1. DSH 需启用 sessions 服务(标准 Web 桌面 profile 已包含)。
  2. DSH 主机需能出站 HTTPS 访问 api.telegram.org(可走 DSH 全局代理)。
  3. 在 @BotFather 创建 Bot 并取得 token。
  4. 运行环境:node >= 22.19.0,dsh >= 0.2.0(见 package.json)。

安装与启用

Desktop profile(Electron 管理)

dsh plugin --profile desktop add 会被拒绝,需通过 GUI:

  1. 打开 DSH → 侧栏 Plugins → Add plugin。
  2. 填入 GitHub URL https://github.com/sflaer/dsh-telegram-relay,或本地 checkout 的绝对路径。
  3. 安装并重启 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。

  1. 在浏览器打开上述控制面板 URL。
  2. 粘贴 Bot token,点击 Save。token 会写入 DSH 凭据存储(键名 TELEGRAM_RELAY_BOT_TOKEN,可用 tokenEnv 覆盖引用),并在 config.json 保留本地副本(权限 0600),便于凭据服务晚于插件挂载时仍能重试启动。
  3. 在 Telegram 私聊 Bot 发送 /start,会话自动绑定。
  4. 使用 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。

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

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

小夜