🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

Telegram 俄语遥控 danilinao/dsh-telegram-channel-ru

DeepSeek Harness
danilinao12 天前有提交已提供中文文档扫描:含敏感能力

用手机 Telegram 接管电脑上正在进行的会话

30.7/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/24 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add danilinao/dsh-telegram-channel-ru
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · market
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
数据截至 2026/10/25·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/05·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 12 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 36 处,展示前 28 条)
  • 发起网络请求
    client/client.js:297
    const response = await fetch(INFO_URL, {
  • 发起网络请求
    client/client.js:423
    const response = await fetch(RESOLVE_URL, {
  • 写入本地文件
    lib/bridge.js:3394
    mkdirSync(dirname(this.bindingsPath()), { recursive: true });
  • 写入本地文件
    lib/bridge.js:3395
    writeFileSync(this.bindingsPath(), JSON.stringify(obj, null, 2));
  • 读取本地文件
    lib/bridge.js:3403
    const raw = readFileSync(this.bindingsPath(), 'utf8');
  • 发起网络请求
    lib/client.js:16
    const agent = new EnvHttpProxyAgent();
  • 发起网络请求
    lib/client.js:17
    const proxied = ((input, init) => undiciFetch(input, {
  • 读取本地文件
    lib/catalog.js:90
    for (const dir of readdirSync(root))
  • 读取本地文件
    lib/catalog.js:99
    if (existsSync(file))
  • 读取本地文件
    lib/catalog.js:122
    mtime = statSync(file).mtimeMs;
  • 读取本地文件
    lib/catalog.js:131
    const raw = zstd(readFileSync(file)).toString('utf8');
  • 读取本地文件
    lib/catalog.js:202
    if (statSync(file).size > 256_000)
  • 写入本地文件
    lib/catalog.js:206
    mkdirSync(join(file, '..'), { recursive: true });
  • 写入本地文件
    lib/catalog.js:208
    appendFileSync(file, `${new Date().toISOString()} ${line}\n`);
  • 读取本地文件
    lib/catalog.js:392
    return statSync(file).mtimeMs;
  • 写入本地文件
    src/bridge.ts:3708
    mkdirSync(dirname(this.bindingsPath()), { recursive: true })
  • 写入本地文件
    src/bridge.ts:3709
    writeFileSync(this.bindingsPath(), JSON.stringify(obj, null, 2))
  • 读取本地文件
    src/bridge.ts:3717
    const raw = readFileSync(this.bindingsPath(), 'utf8')
  • 读取本地文件
    src/catalog.ts:135
    for (const dir of readdirSync(root)) dirs.push(join(root, dir))
  • 读取本地文件
    src/catalog.ts:142
    if (existsSync(file)) return file
  • 读取本地文件
    src/catalog.ts:170
    mtime = statSync(file).mtimeMs
  • 读取本地文件
    src/catalog.ts:177
    const raw = zstd(readFileSync(file)).toString('utf8')
  • 读取本地文件
    src/catalog.ts:282
    if (statSync(file).size > 256_000) return
  • 写入本地文件
    src/catalog.ts:284
    mkdirSync(join(file, '..'), { recursive: true })
  • 写入本地文件
    src/catalog.ts:286
    appendFileSync(file, `${new Date().toISOString()} ${line}\n`)
  • 读取本地文件
    src/catalog.ts:483
    return statSync(file).mtimeMs
  • 发起网络请求
    src/client.ts:152
    const agent = new EnvHttpProxyAgent()
  • 发起网络请求
    src/client.ts:154
    undiciFetch(input as string | URL, {
扫描于 2026/11/5(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-agent@deepseek-ai/dsh-llm@deepseek-ai/dsh-session@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

README

由 DeepSeek 最新模型翻译生成
dsh-telegram-channel-ru Русский клон hi-wenw/dsh-telegram-channel с доработками. Взята база 0.3.5 (коммит 7af6cef) и добавлено: полностью русский интерфейс, скрытие архивных сессий в меню выбора, наименование сессии на кнопке, чтение каталога через хост-сервисы DSH 0.2 (там, где оригинал ждал удалённый apiProxy), и русская карточка бота. Репозиторий: <https://github.com/danilinao/dsh-telegram-channel-ru>. Что именно изменено и как синхронизироваться с оригиналом — в UPSTREAM.md.
展开完整文档(README 剩余 1 节)
dsh-telegram-channel-ru

Русский клон hi-wenw/dsh-telegram-channel
с доработками. Взята база 0.3.5 (коммит 7af6cef) и добавлено: полностью
русский интерфейс, скрытие архивных сессий в меню выбора, наименование сессии на
кнопке, чтение каталога через хост-сервисы DSH 0.2 (там, где оригинал ждал
удалённый apiProxy), и русская карточка бота. Репозиторий:
<https://github.com/danilinao/dsh-telegram-channel-ru>. Что именно изменено и как
синхронизироваться с оригиналом — в UPSTREAM.md.

Имя пакета и имя репозитория — dsh-telegram-channel-ru (суффикс -ru отделяет русское ответвление от оригинала в общем пространстве имён; на npm пакет с 0.8.1). Плагин в профиле DSH тоже называется dsh-telegram-channel-ru. Старые адреса danilinao/dsh-telegram-channel продолжают работать — GitHub редиректит их на новое имя.

Telegram-пульт для DeepSeek Harness: телефон подключается к уже идущей сессии
на компьютере и продолжает её — один диалог, две стороны. Компьютер остаётся источником истины: плагин не запускает второй агент и не дублирует контекст, а работает с теми же сессиями, что открыты в Web. Плагин живёт внутри процесса dsh web и подключается в профиль как link:.

Что умеет

- Настройки в Web-интерфейсе: вкладка «Telegram» в «Настройках». Токен,
список пользователей, доступ и формат сообщений — как у cost-meter и plugin-market, без перезапуска dsh и без ручной правки YAML. Та же форма открывается и с карточки плагина (Plugins → dsh-telegram-channel-ru). Несколько человек в белом списке, добавление по @username и по id.
- Пульт к живой сессии. /sessions → рабочая область → сессия → привязка.
Дальше всё, что вы пишете в Telegram, попадает в эту же сессию; ответы и работа
инструментов видны и на компьютере.
- Русский интерфейс. Команды, меню бота, пикеры, /status, /compact,
уведомления и карточка бота — по-русски.
- Архивные сессии скрыты. Меню показывает только живые сессии: учитываются
оба написания id (session-<uuid> и <uuid>), проекционные флаги архива и
список archivedSessionIds. Области, где не осталось ничего живого, из меню
тоже исчезают.
- На кнопке — имя сессии. N. <наименование> ▶/▷; имя берётся из заголовка сессии, иначе из первого сообщения, иначе рабочая область · дата. ▶ — сессия в памяти, ▷ — поднимется при привязке.
- Не только текст. Картинки (png/jpeg/webp/gif, в том числе с подписью;
альбомы склеиваются в одно сообщение) и текстовые документы — txt, md, json, yaml, csv, код (.gd, .ts, .py, …), до 128 КБ: файл приходит в сессию текстом вместе с подписью. Бинарные файлы — через Web.
- Двусторонние вопросы и подтверждения. Когда агент спрашивает «какой
вариант?» или просит разрешение на инструмент, ответить можно из Telegram:
варианты приходят inline-кнопками, есть «✏️ Свой ответ» для свободного
文本和「✅ 完成」用于多选;权限用按钮「✅ 允许」/「⛔ 拒绝」。字母(A、B)和普通文本也接受;在 Web 里回复会关闭 TG 中的通道。
- 模型、上下文、压缩。 /model、/status、/compact、/mission、/stop、/new —— 都能在手机上操作。
- 项目和会话完全在手机上管理。 列表里能看到所有工作区,包括空工作区;在空工作区里,按钮会创建会话。/newproject <路径>(或按钮「➕ 新建项目」)把新文件夹加入注册表,/new 在当前工作区创建对话,会话旁的 🗄 或 /archive 把它移入归档(工作停止,会话从菜单和 Web 中消失)。
- 命令和推理 —— 完整显示,但放在折叠块里。 工具调用带完整参数送达,模型推理则作为单独区块「🧠 推理」出现在每个回答之前。两者都折叠进 Telegram 的「可展开引用」(),点一下即可展开;/reasoning off 为特定聊天关闭推理(默认开启)。
- 打开会话时显示历史。 绑定时立即显示对话最近的消息;按钮「⬅ 更早」翻得更深,/history [seq] 也能手动翻。历史里能看到用户发言、助手回答和工具调用(折叠显示)。
- 归档与列表分开。 工作区的会话列表里只有未归档的;下方按钮「🗂 已归档 (N)」打开该工作区的归档,带「↩」(恢复)和「← 返回会话」按钮。全局归档也可用:/archived。
- 有意义的会话名。 如果会话没有标题和投影,名字取自磁盘上的日志 —— 用户的第一条消息。所以列表里看到的是「项目:… Synthriders — Beatmap Studio…」,而不是十一行都叫同一个「Synthriders」;旁边是日期和 id 尾部。空会话(日志里没有任何消息)不显示 —— 底部有附注「已隐藏空会话:N」。
- 会话状态通知。 聊天里会收到:一轮成功结束、崩溃并附错误文本和提示(token/配额用尽、请求限流、模型不可用、上下文溢出、网络、密钥)、达到输出 token 上限、异常中断,以及智能体的提问(「❓ 会话提出了问题,等待回答」)—— 都带会话名和项目名。默认情况下机器人跟踪所有会话,包括从电脑上启动的;/notify bound 缩小到已绑定的会话,/notify on | errors | off 设定事件集合。通知下方是按钮:出错后的 🔁 重试、token 上限后的 ▶ 继续、📜 最后回答 和 📖 历史。

安装

从 npm —— dsh-telegram-channel-ru:

dsh plugin --profile web add dsh-telegram-channel-ru
systemctl restart dsh # плагин монтируется при старте

从仓库(开发)—— 插件以 link: 方式接入,直接从项目文件夹运行:

git clone https://github.com/danilinao/dsh-telegram-channel-ru
dsh plugin --profile web add link:$PWD/dsh-telegram-channel
systemctl restart dsh

仓库里已经带了构建好的 lib/,所以克隆下来就能直接用,不用再构建。
如果要改代码,就得重新构建(src/ → lib/):见
BUILD.md(npm install && npm run check)。

配置写在 ~/.dsh/profiles/web/cordis.patch.yml 里的 - id: dsh-telegram-channel-ru 这一行(注意是覆盖 id,不是 insert:插件包已经把这个 id 插进去了):

- id: dsh-telegram-channel-ru
name: dsh-telegram-channel-ru
config:
token: "<токен от @BotFather>"
allowedUserIds: [<ваш числовой id из @userinfobot>]

从 0.8.0 升级到 0.8.1。 包已改名为 dsh-telegram-channel-ru,配置档里插件的 id 也跟着变了:旧的 - id: dsh-telegram-channel 这一行已经对不上包名,配置(token 和白名单)也就不会生效。操作顺序:先在 cordis.patch.yml 里加一行新 id(以及 name: dsh-telegram-channel-ru), config 保持不变,然后删掉旧行,再执行
dsh plugin --profile web remove dsh-telegram-channel;最后重启。

| 键 | 含义 |
| token / DSH_TELEGRAM_TOKEN | 机器人 token |
| allowedUserIds / DSH_TELEGRAM_ALLOWED_USER_IDS | 白名单;留空则机器人不回复任何人 |
| allowAllUsers | 仅调试时设为 true |
| maxMessageLength | 默认 4096 |
| pollingTimeoutSec | 默认 30 |
| rendering | html(默认,任何客户端都支持)或 rich |
| users | 从 GUI 添加的人员列表:id、备注(name)、enabled;优先级高于扁平列表 |

Web 界面里的设置

以前要在 cordis.patch.yml 里手动改的东西,现在 GUI 里都有—— 设置 → Telegram(和「支出」「Plugins」并排的标签页):表单注册在插件 id 下的 settings.section 槽位,标签页标题取自语言包(ru/en),跟随当前语言切换。
同一个表单在插件卡片上也能打开(Plugins → dsh-telegram-channel-ru):两边是同一个组件、同一个 configForms 作用域,所以设置不会对不上。

- 机器人 token——「只写」字段:DSH 不会把密钥发到浏览器
(.role('secret')),所以页面只显示「已保存」和状态行「机器人已连接:@名字」。
留空 = 「保持原样」,点「检查」会重新向 Telegram 查询(getMe)。
- 用户——可以一次加多个人:id、备注、「回复」勾选框。
按数字 id 或 @username 添加(机器人通过 getChat 解析),还有「最近给机器人发过消息」的快捷标签——点一下就能加上已经来找过机器人的人。
取消勾选后这个人还留在列表里,但机器人不会回复。
- 访问——「允许所有人」(有风险,仅调试用)。
- 外观——html / rich。
- 高级——消息最大长度和 long-poll 超时。
保存 — 一次原子写入配置档:页面只发送改动过的字段,所以每次编辑不会重写 token。
不需要重启 dsh: 插件监听 loader/volatile-update,停掉旧桥接,用新值拉起新桥接;getUpdates 的偏移量会保留,因此已处理的消息不会被处理两次。

cordis.patch.yml 里也是同样的内容(页面写的就是这个):

- id: dsh-telegram-channel-ru
name: dsh-telegram-channel-ru
config:
token: "<токен>"
users:
- id: 333041652
name: Алексей
enabled: true
- id: 777000888
enabled: false
allowAllUsers: false
rendering: html

allowedUserIds(0.8.x 的扁平列表)继续可用 — 只要 users 为空就会读取它。第一次从 GUI 保存会写入 users 并移除 allowedUserIds,避免留下第二份看不见的白名单。

多人使用须知。 机器人不区分会话访问权限:名单里每个人都能看到所有工作区,也能绑定任意会话 — 和原来唯一所有者完全一样。如果这不合适,就逐个添加人员,并保持 allowAllUsers 关闭。

页面只从主机获取非机密信息(getMe、getChat 里的名字),走 /plugins/dsh-telegram-channel-ru/settings/ 下的两个路由(info 和 resolve);token 不经过它们。需要 DSH 0.2.x:0.1.x 的 Plugins 没有表单,这个分区根本不会出现。

命令

| 命令 | 作用 |
| /sessions | 工作区 → 会话 → 绑定(归档和空会话隐藏) |
| /last | 已绑定会话的最后一问一答 |
| /model | 切换模型(从下一轮起生效) |
| /status | 模型、思考深度、上下文、TTFT、token |
| /compact | 压缩会话历史(会话空闲时) |
| /rich | on — rich 渲染,off — HTML(对本聊天) |
| /reasoning | on/off — 以剧透形式发送模型推理(默认 on,按聊天记住) |
| /stop | 中断当前轮次 |
| /mission | 任务列表和进度 |
| /new | 在当前工作区新建对话并绑定 |
| /newproject <путь> [\| Название] | 把文件夹添加为项目(工作区) |
| /archive | 把已绑定会话移入归档 |
| /archived | 归档列表,「↩」按钮可恢复会话 |
| /history [seq] | 会话之前的消息(用「⬅ Раньше」翻页) |
| /retry | 重发上一次请求(出错后) |
| /find <текст> | 按名称或文件夹查找会话,用按钮绑定 |
| /notify on\|errors\|off | 发送哪些事件(全部 / 仅错误 / 不发送) |
| /notify every\|bound | 跟踪哪些会话(全部 / 仅已绑定) |
| /projects | 项目和会话列表(同 /sessions) |
| /unbind | 解绑手机(电脑上的会话保留) |
| /cancel | 关闭 Telegram 里的回复/确认 |
| /help | 帮助 |

兼容性

插件兼容 DSH 0.2.x:会话目录、模型列表和会话创建都直接从宿主服务读取(sessionController.list、workspaceRegistry、sessionController.modelCatalog / selectModel / create),因为原版 0.3.5 依赖的 apiProxy 服务在 0.2 中已移除。旧的 apiProxy 路径仍然保留,服务可用时继续使用。图片发送也已移植:在 0.2 上,附件通过 sessionController.prompt 发送。
项目和归档通过 workspaceRegistry.create / archiveSession 处理。

从 0.8.0 起,peer 依赖 @deepseek-ai/dsh 面向运行时 0.2.1-alpha.2(^0.2.1-alpha.2),因此不需要 allow-version 例外。如果宿主升级到不兼容的版本,DSH 会拒绝加载插件——这时要么调整版本范围,要么授予例外(见 BUILD.md)。

来源与许可证

克隆自 hi-wenw/dsh-telegram-channel(MIT,基线为提交 7af6cef)。提交历史保留:其中能看到原版作者,最上面是我们的改动。如何与原版同步、如何发布——见 UPSTREAM.md。

许可证为 MIT(LICENSE);原版的版权声明已保留。

关于

DeepSeek Harness(dsh)的 Telegram 遥控器:从手机接入正在运行的 Web 会话,在同一个对话里继续工作——一条轨迹,两端同步,沿用 Codex 式远程控制的思路。

桌面会话是唯一事实来源。插件运行在 dsh web 进程内,绝不另起智能体,也绝不分叉上下文:你从手机发出的任何内容都进入电脑上已打开的会话,两端看到相同的消息、工具调用和回答。

这是 hi-wenw/dsh-telegram-channel 的俄语克隆版,带有新增功能,基于 0.3.5 基线(提交 7af6cef)。与原版的确切差异以及同步/发布流程见 UPSTREAM.md。

功能

- 接入运行中的会话。 /sessions 按工作区 → 会话 → 接入逐级选择。接入后,纯文本(和图片)直接进入该会话。
- 俄语界面。 所有面向用户的字符串——命令、Telegram 命令菜单、选择器、/status、/compact、通知、错误——都是俄语,机器人还带有俄语资料卡(setMyDescription / setMyShortDescription)。
- 隐藏已归档会话。 选择器只列出运行中的会话。归档 id 按两种写法匹配(session-<uuid> 和 <uuid>),逐项的 archived / archivedAt 标志会被识别,宿主返回的 archivedSessionIds 也会合并进来。没有运行中会话的工作区会从菜单中消失。
- 按钮上显示会话名称。 按钮显示为 N. <name> ▶/▷,名称取自会话标题,没有标题则取第一条用户消息(titleInput.first.text),否则用 workspace · date。▶ 表示会话在内存中活跃,▷ 表示会话已挂起,attach 时会恢复。冷会话通过宿主的投影 API 命名,按 updatedAt 缓存。

- 不只是文本,还有图片。 支持 PNG/JPEG/WebP/GIF,可带说明文字,也可不带;相册照片会合并成一条消息。图片走宿主附件服务,和 Web UI 用的是同一条通道。
- 推理与工具调用,折叠显示。 每条回答前有一个「🧠 Рассуждения」引用块,装着模型的思考过程;每次工具调用都带完整参数。两者都是 Telegram 可展开引用(),点一下就能展开。/reasoning off 可让单个聊天不再显示推理。
- 不只是文本。 照片(png/jpeg/webp/gif,含说明文字和相册)和文本文档——txt、md、json、yaml、csv、代码(.gd、.ts、.py 等),最大 128 KB——会作为提示词文本进入会话,紧挨着说明文字。二进制文件走 Web UI。
- 双向问答与审批。 智能体提出选择题或为某个工具申请权限时,你可以直接在 Telegram 里回答:选项以内联按钮形式出现,旁边还有「✏️ Свой ответ」用于自由输入,「✅ Готово」用于多选;审批请求会给出「✅ Разрешить」/「⛔ Отклонить」按钮。输入字母(A、B)或纯文本同样有效。在 Web UI 里作答后,Telegram 这边的通道会关闭。
- 在手机上管理模型、上下文与压缩。 /model、/status、/compact、/mission、/stop、/new。
- 在手机上完整管理项目与会话。 工作区列表显示所有已注册项目,包括空项目;空项目会提供「在此创建会话」按钮。/newproject <path> [ | Title](或「➕ Новый проект」按钮)注册新文件夹,/new 在当前工作区创建会话,会话旁的 🗄(或 /archive)把它移入归档——会话会停止,并从菜单和 Web UI 中消失。
- 命令与推理,完整但折叠。 工具调用带完整参数到达,模型的推理单独成块;两者都包在 Telegram 可展开引用()里,不点开就不会占地方。
- attach 时显示对话历史。 绑定会话后立即显示最近的消息;「⬅ Earlier」按钮往前翻页,/history [seq] 可手动翻。用户提示词、助手回复和工具调用(以剧透形式)都包含在内。
- 归档单独存放。 会话列表只显示未归档的会话;「🗂 Архивные (N)」按钮打开该工作区的归档,里面有「↩」(恢复)和「← К сессиям」(返回)。全局归档用 /archived。
- 有意义的会话名。 会话既没有标题也没有投影时,名字从磁盘上的会话日志读取(第一条用户消息),因此列表每行都显示「Проект: … Synthriders — Beatmap Studio…」,而不是同一个项目名;日期和 id 尾部跟在后面。
- 会话状态通知。 一轮对话完成时,聊天会收到 ✅;失败时收到 ⚠️,附带错误文本和提示(配额/token 耗尽、速率限制、模型不可用、上下文溢出、网络、凭据),输出 token 上限和崩溃遗留的轮次会收到警告,还有「❓ 会话提出了问题,正在等待」——每条都带会话名和所属项目。
默认情况下,机器人跟随每个会话,包括在桌面端启动的轮次;/notify bound 把它收窄到已绑定的会话,/notify on | errors | off 选择事件集。

环境要求

- 一个能正常运行的 DeepSeek Harness,带 web 配置档(dsh web)。
- Harness 自带的 Node.js。
- 从 @BotFather 获取的 Telegram 机器人 token,以及你自己的数字用户 id(从 @userinfobot 获取)——白名单是硬性门槛:白名单为空时,机器人不回应任何人。
- 到 api.telegram.org 的出站 HTTPS。如果你的网络需要代理或 VPN,为 harness 进程设置 HTTP(S)_PROXY,或在操作系统层面路由——插件本身不关心隧道,只用普通 HTTPS 客户端(支持环境变量代理)。
- 不需要 Python,不需要额外服务。

安装

git clone https://github.com/danilinao/dsh-telegram-channel-ru /path/to/dsh-telegram-channel
dsh plugin --profile web add link:/path/to/dsh-telegram-channel
systemctl restart dsh # the plugin is mounted at startup only

或者安装已发布的包,而不是克隆仓库: dsh plugin --profile web add dsh-telegram-channel-ru。

仓库自带构建好的 lib/,克隆下来即可直接运行。如果你改了 src/,重新构建(npm install && npm run check)——DSH 执行的是 lib/index.js,从不执行 TypeScript 源码。见 BUILD.md。

配置

在 ~/.dsh/profiles/web/cordis.patch.yml 里放一个按 id 定位的覆盖项(插件包已经插入了行 id,所以再 insert 会创建重复项,加载器会拒绝):

- id: dsh-telegram-channel-ru
name: dsh-telegram-channel-ru
config:
token: "<BotFather token>"
allowedUserIds: [123456789]
allowAllUsers: false
maxMessageLength: 4096
pollingTimeoutSec: 30
rendering: html

| 键 | 环境变量 | 含义 |
| token | DSH_TELEGRAM_TOKEN | 机器人 token;没有它轮询不会启动 |
| allowedUserIds | DSH_TELEGRAM_ALLOWED_USER_IDS | 允许与机器人对话的数字用户 id;为空 = 无人可用 |
| allowAllUsers | — | 接受任何人;仅用于调试 |
| maxMessageLength | — | 发出消息的分块大小,默认 4096 |
| pollingTimeoutSec | — | 长轮询超时,默认 30 |
| rendering | — | html(默认,所有客户端都可用)或 rich(Telegram 原生富消息) |
| users | — | 在 GUI 中编辑过的人员列表:id、可选 name、enabled;优先于扁平列表 |

按 id 定位的行必须填 name:没有它,插件管理器无法把该行映射回加载器条目,设置表单会变成只读。

Web UI 中的设置

在侧边栏打开 Plugins → dsh-telegram-channel-ru:插件卡片以页面形式提供同样的设置,不用编辑 YAML,也不用 systemctl restart dsh。

- Bot token — 只写。DSH 会从设置文档中剥离 .role('secret') 字段,所以页面只显示「已保存」和一行实时状态(「Connected as @bot」);留空则保留当前 token。Check 会再次向 Telegram 询问(getMe)。
- Users — 多个人,每人有 id、可选标签和「Answers」开关。可按数字 id 或 @username 添加(服务端通过 getChat 解析),也可点「最近给机器人发过消息」的标签。被静音的用户仍留在列表里,但机器人会拒绝其请求。
- Access — 「Allow everyone」(危险,仅用于调试)。
- Appearance — html / rich。
- Advanced — 最大消息长度和长轮询超时。

保存是一次原子性的配置档写入,只重述改动的字段,所以每次编辑不会重写 token。插件监听 loader/volatile-update,停掉旧桥接,用新值启动新桥接——同时沿用 getUpdates 的 offset,因此不会有消息被回复两次。

页面只通过 /plugins/dsh-telegram-channel-ru/settings/ 下的两个路由(info、resolve)从宿主读取非机密信息(getMe、来自 getChat 的名称);token 从不经过它们。这需要 DSH 0.2.x——0.1.x 没有设置表单,该区块根本不会出现。

列表中的所有人共享会话。 机器人不区分用户权限:每个在允许列表里的人都能看到所有工作区,并能接入任何会话,和单一所有者完全一样。请谨慎添加人员,并保持 allowAllUsers 关闭。

命令

| 命令 | 作用 |
| /start | 欢迎文本和简短用法提示 |
| /sessions | 工作区列表 → 会话列表 → 接入(隐藏归档和空白会话) |
| /last | 已接入会话的最后一个问题/回答 |
| /model | 切换会话的模型(下一轮生效) |
| /status | 模型、推理强度、上下文压力、TTFT、输入/输出 token、缓存命中 |
| /compact | 压缩已接入会话的历史(仅在空闲时) |
| /rich | on — 富渲染,off — HTML(仅本聊天,会记住) |
| /reasoning | on/off — 以剧透形式镜像模型的推理(默认 on,按聊天) |
| /stop | 中止当前轮次 |
| /mission | 待办列表和进度 |
| /new | 在当前工作区创建新会话并接入 |
| /newproject <path> [\| Title] | 把文件夹注册为项目(工作区) |
| /archive | 把当前附着的会话移到归档 |
| /archived | 查看已归档会话,「↩」可恢复其中一个 |
| /history [seq] | 查看会话更早的消息(「⬅ Earlier」向前翻页) |
| /retry | 重发上一条提示词(出错后使用) |
| /find <text> | 按标题或文件夹查找会话,点按钮即可附着 |
| /notify on\|errors\|off | 这个聊天接收哪些事件(全部 / 仅错误 / 不接收) |
| /notify every\|bound | 关注哪些会话(全部 / 仅已附着的) |
| /projects | 项目 / 会话列表(/sessions 的别名) |
| /unbind | 解绑手机;桌面端会话继续运行 |
| /cancel | 关闭 Telegram 侧的问题 / 审批(在 Web UI 里仍可回答) |
| /help | 帮助 |

工作原理

1. 机器人长轮询 getUpdates,只应答白名单里的用户。
2. /sessions 生成一份工作区和会话的目录,并按你的聊天记住它,这样即使列表刷新,按钮回调也保持一致。
3. 附着时解析会话:活跃的智能体直接使用,冷会话通过宿主的 agents.resume 恢复。
4. 消息走宿主的会话管道投递——和 Web UI 用的是同一条——所以流式输出、工具调用、问题、审批都能在发生时同步到手机。
5. 绑定关系能扛住重启:聊天 → 会话的映射会持久化,插件会记录恢复了多少个绑定。

除了 Telegram Bot API 的流量,没有任何数据离开这台机器。

DSH 0.2.x 实现说明

原版 0.3.5 对接的是名为 apiProxy 的宿主服务,DSH 0.2 里已经没有它——菜单会悄悄退化成「只显示运行中的会话」。这个克隆版读取的数据和 Web UI 一样,都来自宿主服务:

- workspaceRegistry.list() —— 工作区排序、标题、会话 id;workspaceRegistry.archivedSessionIds —— 归档集合;
- sessionController.list() —— 每个已存储的会话及其投影(title、titleInput、sessionListMetadata 用于判断 blank/running);
- sessionController.projections({ sessionId }) —— 冷会话的名称。

模型列表和模型切换走同一个服务(sessionController.modelCatalog() 和 sessionController.selectModel({ sessionId, provider, model, reasoningEffort })),/new 则用 sessionController.create({ workspaceId | cwd })。

旧的 apiProxy 路由仍会优先尝试,所以插件在 0.1.x 宿主上也能用。归档检查前会先规范化会话 id,因为宿主注册表里两种拼写混用。

图片发送也移植过来了:在 0.2 上,附件通过 sessionController.prompt({ requestId, sessionId, mode: 'queue', content }) 发送,内容分段和 Web UI 发的一致。项目和归档分别用 workspaceRegistry.create(path, title) 和 workspaceRegistry.archiveSession(id, { stopActivity: true }),所以归档的会话会被停掉,而不是继续烧 token。
从 0.8.0 起,@deepseek-ai/dsh 的 peer 版本范围已对准当前运行时(^0.2.1-alpha.2),因此不需要 allow-version 豁免。如果宿主换到不兼容的版本,DSH 会拒绝加载插件——这时要么放宽版本范围,要么授予豁免:

dsh plugin --profile web allow-version dsh-telegram-channel-ru@<version> \
--dsh-version <dsh version> --accept-risk

豁免按配置档存放,路径是 ~/.dsh/profiles/web/compatibility.json。

故障排查

| 现象 | 原因 / 修复 |
| 机器人从不回复 | 没有 token,或者 allowedUserIds 为空 / 不含你的数字 id |
| 报 "long polling" 错误、毫无动静 | 宿主访问不到 api.telegram.org——检查代理 / VPN,不是插件的问题 |
| 菜单只显示运行中的会话 | 宿主既没暴露 apiProxy 也没暴露 sessionController——检查你的 DSH 版本 |
| duplicate loader entry id | 配置档补丁对某个 id 用了 insert,而 bundle 已经插入过该 id;改用按 id 定位的行 |
| /model 不可用 | 会话未挂载,或者宿主既没有 apiProxy 也没有 sessionController.modelCatalog |
| Telegram 客户端里还是旧的机器人菜单 | 客户端缓存了命令列表;重新打开聊天(或重启应用) |
| 升级后插件不加载 | 新的确切版本缺少版本豁免 |

来源与许可

克隆自 hi-wenw/dsh-telegram-channel(MIT),基线提交 7af6cef。DSH 通过 main: lib/index.js 运行这个包,所以 lib/ 是实际执行的产物,src/ 是 TypeScript 源码,必须与它保持同步。上游作者信息保留在 git 历史中;我们的改动叠加在其上。见 UPSTREAM.md。

MIT——见 LICENSE。原始版权声明已保留。
预览分享卡片长什么样 ↓danilinao/dsh-telegram-channel-ru
分享 · DeepSeek Harness Hub
danilinao/dsh-telegram-channel-ru

用手机 Telegram 接管电脑上正在进行的会话

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部