在手机上派任务给本机 AI,答案回传 Telegram
29.7/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
该插件未发布到 npm,按作者文档从 GitHub 源安装即可(静态检查只覆盖 npm 路径,不代表插件不可用)。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add wfh86421/dsh-telegram-bridge该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · platform
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 51 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装仓库 package.json 标记 private,未发布到 npm,需从源码安装;安装清单取自 src/host-plugin/package.json
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-tg-session(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/11 22:25:04
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 55 处,展示前 36 条)
- 读取本地文件src/headless-bridge/tg-bridge.mjs:79
const j = JSON.parse(readFileSync(SECRETS, 'utf8').replace(/^ FEFF/, '')); - 发起网络请求src/headless-bridge/tg-bridge.mjs:90
const req = https.request({ - 读取本地文件src/headless-bridge/tg-bridge.mjs:139
function ensureDir(d) { if (!existsSync(d)) mkdirSync(d, { recursive: true }); } - 写入本地文件src/headless-bridge/tg-bridge.mjs:139
function ensureDir(d) { if (!existsSync(d)) mkdirSync(d, { recursive: true }); } - 读取本地文件src/headless-bridge/tg-bridge.mjs:142
const s = JSON.parse(readFileSync(STATE, 'utf8').replace(/^ FEFF/, '')); - 写入本地文件src/headless-bridge/tg-bridge.mjs:147
function saveState(s) { ensureDir(OPTS.stateDir); writeFileSync(STATE, JSON.stringify(s, null, 1), 'utf8'); } - 写入本地文件src/headless-bridge/tg-bridge.mjs:148
function logRow(row) { try { ensureDir(OPTS.stateDir); appendFileSync(LOG, JSON.stringify(row) + '\n', 'utf8'); } catch {} } - 写入本地文件src/headless-bridge/tg-bridge.mjs:149
function beat() { try { ensureDir(join(PROFILE_DIR, 'ops', 'state')); writeFileSync(HEARTBEAT, now8(), 'utf8'); } catch {} } - 读取本地文件src/headless-bridge/tg-bridge.mjs:150
function clearBeat() { try { if (existsSync(HEARTBEAT)) unlinkSync(HEARTBEAT); } catch {} } - 删除本地文件src/headless-bridge/tg-bridge.mjs:150
function clearBeat() { try { if (existsSync(HEARTBEAT)) unlinkSync(HEARTBEAT); } catch {} } - 读取本地文件src/headless-bridge/tg-bridge.mjs:155
if (existsSync(LOCK)) { - 读取本地文件src/headless-bridge/tg-bridge.mjs:157
try { old = JSON.parse(readFileSync(LOCK, 'utf8')); } catch {} - 写入本地文件src/headless-bridge/tg-bridge.mjs:161
writeFileSync(LOCK, JSON.stringify({ pid: process.pid, startedAt: now8() }), 'utf8'); - 删除本地文件src/headless-bridge/tg-bridge.mjs:164
function releaseLock() { try { if (existsSync(LOCK)) unlinkSync(LOCK); } catch {} } - 写入本地文件src/headless-bridge/tg-bridge.mjs:426
writeFileSync(stubOk, 'console.log("STUB-OK 最終答案");process.exit(0);\n', 'utf8'); - 删除本地文件src/headless-bridge/tg-bridge.mjs:448
if (existsSync(LOCK)) unlinkSync(LOCK); - 删除本地文件src/headless-bridge/tg-bridge.mjs:454
if (existsSync(LOCK)) unlinkSync(LOCK); - 读取本地文件src/host-plugin/lib/answerer.js:45
if (!existsSync(stateDir)) mkdirSync(stateDir, { recursive: true }); - 写入本地文件src/host-plugin/lib/answerer.js:45
if (!existsSync(stateDir)) mkdirSync(stateDir, { recursive: true }); - 写入本地文件src/host-plugin/lib/answerer.js:46
appendFileSync(join(stateDir, 'tg-session.jsonl'), JSON.stringify(row) + '\n', 'utf8'); - 读取本地文件src/host-plugin/lib/index.js:80
const j = JSON.parse(readFileSync(cfg.secretsFile, 'utf8').replace(/^ FEFF/, '')); - 读取本地文件src/host-plugin/lib/index.js:86
const ensureDir = (d) => { if (!existsSync(d)) mkdirSync(d, { recursive: true }); }; - 写入本地文件src/host-plugin/lib/index.js:86
const ensureDir = (d) => { if (!existsSync(d)) mkdirSync(d, { recursive: true }); }; - 读取本地文件src/host-plugin/lib/index.js:89
const s = JSON.parse(readFileSync(STATE, 'utf8').replace(/^ FEFF/, '')); - 写入本地文件src/host-plugin/lib/index.js:93
const saveState = () => { try { ensureDir(stateDir); writeFileSync(STATE, JSON.stringify(state, null, 1), 'utf8'); } catch (e) { warn(`狀態寫入失敗:${e.mess - 写入本地文件src/host-plugin/lib/index.js:94
const logRow = (row) => { try { ensureDir(stateDir); appendFileSync(LOG, JSON.stringify(row) + '\n', 'utf8'); } catch { } }; - 写入本地文件src/host-plugin/lib/index.js:95
const beat = () => { try { ensureDir(join(cfg.workspacePath, 'ops', 'state')); writeFileSync(HEARTBEAT, now8(), 'utf8'); } catch {} }; - 读取本地文件src/host-plugin/lib/index.js:96
const clearBeat = () => { try { if (existsSync(HEARTBEAT)) unlinkSync(HEARTBEAT); } catch {} }; - 删除本地文件src/host-plugin/lib/index.js:96
const clearBeat = () => { try { if (existsSync(HEARTBEAT)) unlinkSync(HEARTBEAT); } catch {} }; - 读取本地文件src/host-plugin/lib/index.js:102
if (existsSync(LOCK)) { - 读取本地文件src/host-plugin/lib/index.js:104
try { old = JSON.parse(readFileSync(LOCK, 'utf8')); } catch {} - 写入本地文件src/host-plugin/lib/index.js:108
writeFileSync(LOCK, JSON.stringify({ pid: process.pid, startedAt: now8() }), 'utf8'); - 删除本地文件src/host-plugin/lib/index.js:112
const releaseLock = () => { try { if (haveLock && existsSync(LOCK)) unlinkSync(LOCK); } catch {} haveLock = false; }; - 发起网络请求src/host-plugin/lib/index.js:117
const req = https.request({ - 发起网络请求src/host-plugin/lib/shared.js:22
const req = https.request({ - 读取本地文件src/host-plugin/lib/shared.js:42
const j = JSON.parse(readFileSync(secretsFile, 'utf8').replace(/^ FEFF/, ''));
扫描于 2026/11/4(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 多轮会话插件
README
由 DeepSeek 最新模型翻译生成dsh-telegram-bridge
Telegram ↔ DeepSeek Harness (DSH):在手机上派工给本机的 AI agent,答案回到 Telegram。
两种实现:A=独立程序(headless 一次性任务);B=DSH host 插件(真的 Session、GUI 看得到、可多轮接续)。
Send tasks to a local DeepSeek Harness agent from Telegram, and get the answer back. Two implementations: a standalone headless runner (A) and a host plugin that creates a real, GUI-visible, multi-turn session (B).
这个套件包含什么
| 目录 | 内容 |
| docs/ | 教学手册(10 份):总览/快速开始/开发 SOP/契约清单/功能与权限/疑难排解/测试计划/二次开发 |
| src/host-plugin/ | 机制 B:dsh-tg-session 插件(零外部依赖,含 25 项测试) |
| src/headless-bridge/ | 机制 A:tg-bridge.mjs+PowerShell 包装+启动器(含 9 项自我测试) |
展开完整文档(README 剩余 1 节)
dsh-telegram-bridge Telegram ↔ DeepSeek Harness (DSH):在手机上派工给本机的 AI agent,答案回到 Telegram。 两种实现:A=独立程序(headless 一次性任务);B=DSH host 插件(真的 Session、GUI 看得到、可多轮接续)。 Send tasks to a local DeepSeek Harness agent from Telegram, and get the answer back. Two implementations: a standalone headless runner (A) and a host plugin that creates a real, GUI-visible, multi-turn session (B). 这个套件包含什么 | 目录 | 内容 | | docs/ | 教学手册(10 份):总览/快速开始/开发 SOP/契约清单/功能与权限/疑难排解/测试计划/二次开发 | | src/host-plugin/ | 机制 B:dsh-tg-session 插件(零外部依赖,含 25 项测试) | | src/headless-bridge/ | 机制 A:tg-bridge.mjs+PowerShell 包装+启动器(含 9 项自我测试) | | examples/ | 设定范例(cordis.patch.yml、状态档) | 没有包含:任何 token/chat id/日志(凭证一律留在 ~/.dsh/notify-secrets.json,在 profile 之外)。 30 秒选机制 | | B(建议) | A(备援) | | 你的 TG 讯息 | 变成真的 Session(GUI 看得到、可接手、可多轮) | 一次性 headless 任务(GUI 看不到) | | 需要核准时 | ⏳ 逾时回报,可在 GUI 按核准后继续 | ❌ 没有核准管道 → 失败 | | 安装 | 中(装 bundle+改设定+重启 DSH) | 低(复制 3 个档) | ⚠️ 两者不可同时跑:都靠 getUpdates 轮询同一支 bot,会互抢讯息。 快速开始 A:headless 桥接器(10 分钟) copy src\headless-bridge\tg-bridge.mjs \tools\ copy src\headless-bridge\run-tg-bridge.ps1 \tools\ node \tools\tg-bridge.mjs --selftest --dry-run --state-dir .\tempselftest # 应 9/9 powershell -File \tools\run-tg-bridge.ps1 -Test "用一行回我 OK" # 真的发一则 powershell -File \tools\run-tg-bridge.ps1 # 常驻 B:host 插件(30 分钟) xcopy /E /I src\host-plugin \packages\dsh-tg-session cmd /c mklink /J "\node_modules\dsh-tg-session" "\packages\dsh-tg-session" 在 \package.json 的 dsh.profile.bundles 追加 "dsh-tg-session" 在 \cordis.patch.yml 设定 tg-session 那一列(见 docs/01) dsh --profile --dump-config | Select-String 'tg-session' # 必须出现 重启 DSH 完整步骤与设定键:docs/01-overview-and-quickstart.md 它能做到什么程度(重点) | | 范围 | | 看 | 整台电脑都能读(不受限) | | 改 | 只限你设定的工作区(workspacePath)+允许的暂存区 | | 要核准 | 写到工作区外、对外网络、传讯息 → 无人时会卡住并通知你 | | 直接拒绝 | 删除/凭证/远端硬体/系统/大量操作(关键字与类别白名单) | | 做不到 | 图片档案、历史讯息、看中间过程、DSH 关机时 | | 费用 | 每则 ≈¥0.03 起(固定前缀 ~1 万 token);内建每日上限 | 细节与实测数字:docs/07-capability-and-permissions.md 文件地图 | 想做的事 | 看这份 | | 搞清楚要学什么 | docs/00-index.md | | 快速上手 | docs/01-overview-and-quickstart.md | | 从零开发一个插件 | docs/05-development-sop.md | | 要改/延伸(API 契约) | docs/06-contracts.md | | 功能与权限的界线 | docs/07-capability-and-permissions.md | | 坏了 | docs/08-troubleshooting.md | | 上线前测试 | docs/09-telegram-test-plan.md | | 换 IM/加功能/多人用 | docs/10-second-development.md | 需求 | 项目 | 版本(本套件实测) | | DeepSeek Harness | @deepseek-ai/dsh 0.1.5-rc.1 | | Node | v22.23.2 | | PowerShell | 5.1(Windows)/含 PowerShell 7 亦可 | | Telegram bot | 任意(用 getUpdates 轮询,不需要公开 IP) | DSH 是 preview 软件,API 会变。升级后请照 docs/06-contracts.md §11 重跑检查。 安全(请务必读) - 这个功能=让远程消息在你电脑上执行 agent。只认一个 chat id、密钥放在 profile 之外、沙箱只允许工作区、危险类别硬拒、有每日成本上限。 - 不要把 token 贴进任何文件或消息;~/.dsh/notify-secrets.json 不要进版控。 - 要给他人用 → 另开一支 bot + 另一个 profile,不要共用。 授权 MIT(见 LICENSE)。DSH 本体为 DeepSeek 所有,本套件只使用其公开接口。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
wfh86421/dsh-telegram-bridge
在手机上派任务给本机 AI,答案回传 Telegram
相关插件 · 平台集成
智能体工程课walkinglabs/learn-harness-engineering
一门项目制课程,教你搭建环境、管理状态、做验证、加控制机制,让 AI 编程智能体稳定干活。
★ 21,155已汉化DSH
71.7
视频翻译配音liuzhao1225/YouDub-webui
开源视频本地化工作台:导入视频,识别、翻译并逐句克隆原声,生成字幕和配音成片。
★ 5,792已汉化Cordis
71.4
失败经验库Ikalus1988/MisakaNet
📚 零依赖、由 git 支撑的微课程库,让 AI 智能体异步分享并检索经过验证的调试经验。| https://misakanet.org
★ 550已汉化DSH
71.2
IM 机器人接入xmanrui/dsh-im
让 DeepSeek Harness 触手可及 Connecting DeepSeek Harness
★ 3,170已汉化DeepSeek 客户端
71
桌面智能体工作区freestylefly/wesight
WeSight 是开源桌面控制台,面向本地 AI 智能体。它帮你安装或复用 Claude…
★ 933已汉化MCP
71
中国平台研究引擎Jesseovo/last30days-skill-cn
给 AI Agent 的中文互联网研究 Skill:检索 8 大平台最近 30…
★ 2,041已汉化DSH
70.7
这是你的仓库?认领条目