Telegram 智能体网关 GooDAnDReaDY/dsh-messenger-gateway
DeepSeek Harnessv0.4.28Telegram 桥接 DeepSeek Harness:会话、steer、homes 和 TTS 语音消息
38.6/100
综合分
5
GitHub 星标
2,196
npm 周下载
—/5
用户评分
数据截至 2026/11/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add @goodandready/dsh-messenger-gatewaynpm 源 · @goodandready/dsh-messenger-gateway 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · platform
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 4 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包@goodandready/dsh-messenger-gateway @ 0.4.28
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/30 15:54:52
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 77 处,展示前 74 条)
- 发起网络请求lib/client.js:634
const res = await fetch(`${ROUTE_PREFIX}/status`, { credentials: 'same-origin', cache: 'no-store', signal: timeoutSignal(10000) }) - 发起网络请求lib/client.js:646
const res = await fetch(`${ROUTE_PREFIX}/pairing`, { credentials: 'same-origin', cache: 'no-store', signal: timeoutSignal(10000) }) - 发起网络请求lib/client.js:667
const res = await fetch(`${ROUTE_PREFIX}/update`, { cache: 'no-store', signal: timeoutSignal(15000) }) - 发起网络请求lib/client.js:689
const res = await fetch(`${ROUTE_PREFIX}/update`, { - 发起网络请求lib/client.js:726
const res = await fetch(`${ROUTE_PREFIX}/smoke`, { - 发起网络请求lib/client.js:1428
const res = await fetch(`${ROUTE_PREFIX}/pairing/approve`, { - 读取本地文件lib/updater.js:68
if (!existsSync(entry)) return undefined - 读取本地文件lib/updater.js:71
if (existsSync(manifestPath)) { - 读取本地文件lib/updater.js:73
const manifest = JSON.parse(readFileSync(manifestPath, 'utf8')) - 发起网络请求lib/updater.js:148
const response = await fetch(`${cleanReg}/${encodeURIComponent(packageName)}/latest`, { - 读取本地文件lib/updater.js:163
const raw = await readFile(manifestPath, 'utf8') - 发起网络请求lib/proxy.js:164
const req = mod.request(options) - 发起网络请求lib/proxy.js:558
req = mod.request({ - 发起网络请求lib/proxy.js:633
if (shouldBypassProxy(url.hostname, env)) return fetch(input, init) - 读取本地文件lib/workspace.js:19
const st = statSync(resolved) - 读取本地文件lib/workspace.js:94
if (existsSync(wsFile)) { - 读取本地文件lib/workspace.js:95
const raw = await readFile(wsFile, 'utf8') - 读取本地文件lib/workspace.js:162
if (existsSync(gitPath)) { - 读取本地文件lib/workspace.js:163
const st = statSync(gitPath) - 读取本地文件lib/workspace.js:168
const content = readFileSync(gitPath, "utf8") - 发起网络请求lib/outbound.js:83
const res = await fetch(url, { signal: effectiveSignal }) - 写入本地文件lib/voice-prefs.js:7
mkdirSync(dir, { recursive: true }) - 写入本地文件lib/voice-prefs.js:10
writeFileSync(tmpPath, JSON.stringify(data, null, 2), "utf8") - 写入本地文件lib/voice-prefs.js:11
renameSync(tmpPath, filePath) - 删除本地文件lib/voice-prefs.js:13
try { unlinkSync(tmpPath) } catch { } - 读取本地文件lib/voice-prefs.js:21
if (filePath && existsSync(filePath)) { - 读取本地文件lib/voice-prefs.js:23
const raw = JSON.parse(readFileSync(filePath, "utf8")) - 读取本地文件lib/personas.js:76
const raw = JSON.parse(readFileSync(filePath, 'utf8')) - 读取本地文件lib/scheduler.js:44
const raw = await readFile(filePath, 'utf8') - 写入本地文件lib/pairing.js:16
mkdirSync(dir, { recursive: true }) - 写入本地文件lib/pairing.js:19
writeFileSync(tmpPath, JSON.stringify(data, null, 2), 'utf8') - 写入本地文件lib/pairing.js:20
renameSync(tmpPath, filePath) - 删除本地文件lib/pairing.js:22
try { unlinkSync(tmpPath) } catch { } - 读取本地文件lib/pairing.js:29
if (filePath && existsSync(filePath)) { - 读取本地文件lib/pairing.js:31
const raw = JSON.parse(readFileSync(filePath, 'utf8')) - 读取本地文件lib/gateway-turn.js:181
const bytes = new Uint8Array(await readFile(att.path)) - 读取本地文件lib/outbox.js:87
if (existsSync(storagePath)) { - 读取本地文件lib/outbox.js:88
const raw = readFileSync(storagePath, 'utf8') - 写入本地文件lib/storage-atomic.js:12
await mkdir(dir, { recursive: true }) - 写入本地文件lib/storage-atomic.js:16
await writeFile(tmpPath, serialized, 'utf8') - 写入本地文件lib/storage-atomic.js:17
await rename(tmpPath, filePath) - 删除本地文件lib/storage-atomic.js:19
await unlink(tmpPath).catch(() => {}) - 写入本地文件lib/storage-atomic.js:29
mkdirSync(dir, { recursive: true }) - 写入本地文件lib/storage-atomic.js:32
writeFileSync(tmpPath, JSON.stringify(data, null, 2), 'utf8') - 写入本地文件lib/storage-atomic.js:33
renameSync(tmpPath, filePath) - 删除本地文件lib/storage-atomic.js:35
try { unlinkSync(tmpPath) } catch { } - 读取本地文件lib/adapters/telegram.js:789
const bytes = file.bytes || (file.path ? await readFile(file.path) : null) - 发起网络请求lib/adapters/discord.js:83
const res = await fetch(this.webhookUrl, { - 读取本地文件lib/adapters/discord.js:114
const bytes = file.bytes || (file.path ? await readFile(file.path) : null) - 发起网络请求lib/adapters/discord.js:121
const res = await fetch(`${DISCORD_API}/channels/${targetChannel}/messages`, { - 发起网络请求lib/adapters/discord.js:156
const res = await fetch(`${DISCORD_API}/channels/${channelId}/messages/${messageId}`, { - 发起网络请求lib/adapters/discord.js:176
const res = await fetch(`${DISCORD_API}/channels/${channelId}/messages`, { - 发起网络请求lib/adapters/slack.js:82
const res = await fetch(this.webhookUrl, { - 发起网络请求lib/adapters/slack.js:114
const res = await fetch(`${SLACK_API}/chat.postMessage`, { - 发起网络请求lib/adapters/slack.js:141
const res = await fetch(`${SLACK_API}/chat.update`, { - 读取本地文件lib/file-manager.js:94
st = await stat(target) - 读取本地文件lib/file-manager.js:109
const rawEntries = await readdir(target, { withFileTypes: true }) - 读取本地文件lib/file-manager.js:118
const entryStat = await stat(full) - 读取本地文件lib/file-manager.js:181
st = await stat(target) - 读取本地文件lib/file-manager.js:197
const bytes = await readFile(target) - 发起网络请求lib/memory-brain.js:116
const res = await fetch(`${cfg.baseUrl}/mcp`, { - 写入本地文件lib/artifacts.js:323
writeFileSync(inPath, svgContent, "utf-8") - 执行外部命令固定命令lib/artifacts.js:325
const proc = spawn("ffmpeg", ["-y", "-i", inPath, "-update", "1", "-frames:v", "1", outPath]) - 读取本地文件lib/artifacts.js:332
return readFileSync(outPath) - 删除本地文件lib/artifacts.js:336
try { unlinkSync(inPath) } catch { } - 删除本地文件lib/artifacts.js:337
try { unlinkSync(outPath) } catch { } - 执行外部命令固定命令lib/tts.js:62
const child = spawn('ffmpeg', args, { stdio: ['ignore', 'ignore', 'pipe'] }) - 写入本地文件lib/tts.js:80
await writeFile(input, audioBytes) - 读取本地文件lib/tts.js:90
return await readFile(output) - 删除本地文件递归lib/tts.js:92
await rm(dir, { recursive: true, force: true }).catch(() => {}) - 发起网络请求lib/integrations.js:10
const res = await fetch(url, { - 读取本地文件lib/photos.js:10
const bytes = new Uint8Array(await readFile(att.path)) - 写入本地文件lib/media.js:48
mkdirSync(cacheDir, { recursive: true }) - 写入本地文件lib/media.js:50
writeFileSync(path, bytes)
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-agent@deepseek-ai/dsh-agent-loop@deepseek-ai/dsh-host-webserver@deepseek-ai/dsh-llm@deepseek-ai/dsh-session@deepseek-ai/dsh-settings@deepseek-ai/schemastery@deepseek-ai/dsh-tools给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 会话管理
- TTS语音消息
最近更新
在 GitHub 查看全部 →v0.4.282026-10-30
Release 5:仪表盘与最终路线图收尾
· Telegram Mini App(TMA)仪表盘(#150):
- 轻量移动端 Web UI,挂在 /dsh-messenger-gateway/webapp 下,沿用 Telegram 原生主题 CSS 变量。
- 对 window.Telegram.WebApp.initData 做 HMAC-SHA256 加密校验(validateTelegramWebAppData)。
- 内存环形缓冲存储 createArtifactStore,捕获生成的 Mermaid 图、图表和表格,支持 #artifact= 深链。
- 全屏产物查看器,SVG 可缩放拖动,代码高亮查看,一键复制按钮。
- 实时主机健康与适配器状态仪表盘:运行时长、消息计数、活跃会话,以及 Outbox DLQ 监控和快速重试。
- 接入 Telegram Bot 交互:通过 Bot API setChatMenuButton 常驻菜单按钮 [📊 Dashboard],快捷操作键盘扩展,以及 /app 聊天命令。
- test/webapp.test.mjs 中完整的单元测试覆盖(8 个测试)。
v0.4.272026-10-30
Release 4:可靠性与计量
· 出站事务队列(Outbox DLQ)(#155):
- 零依赖事务队列(outbox-queue.json),在投递前持久化出站操作。
- 自动离线缓冲、带指数退避与抖动的重试调度,并遵循 Telegram 的 retry_after 头。
- 故障关闭式终态错误检测,把失败转入死信队列(DLQ)。
- DLQ 溢出时向配对聊天发送管理员通知。
- 运维用 /outbox 命令(/outbox、/outbox retry、/outbox clear)。
· Messenger 会话中的 token 用量与成本追踪(#156):
- 提取用量指标(提示词、补全、推理、缓存 token)与单轮时长。
- 多层级会话投影读取(session.projection("costByModel")),回退到按轮累加。
- 精确计价(DeepSeek 官方 token 费率)。
- 可配置的紧凑成本页脚(telegram.costFooter),把执行指标追加到每轮回复。
- 可配置的预算告警阈值(telegram.budgetAlertThresholdUsd)。
- 交互式 /cost 命令,附详细明细。
v0.4.262026-10-29
第 3 批,共 5 批:
· Issue #151:按主题自动划分工作区,项目 worktree 相互隔离(/project bind/list/unbind、git worktree 检查、动态解析 cwd)。
· Issue #152:接入 dsh-memory-brain,持久保存用户配置档与记忆(/memory、/forget、按轮次自动注入上下文、严格隔离用户级作用域)。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成📦 @goodandready/dsh-messenger-gateway
DeepSeek Harness Telegram 专属网关(支持交互按钮调度、论坛话题隔离与语音条回复)
🇬🇧 English •
🇷🇺 Русский •
🇨🇳 中文说明
⭐ 如果您喜欢这个插件,请在 GitHub 上为它点亮 Star — 这能让我知道插件对您有用,并鼓励我继续开发和维护它。
🐛 如果您发现 Bug 或希望增加功能,请使用任意语言在 GitHub 上提交 Issue — 我会评估您的建议,并在后续版本中实现有价值的改进。
⚡ 插件概览
dsh-messenger-gateway 为 DeepSeek Harness 智能体提供企业级 Telegram 接入桥梁。
除常规对话转发外,本插件全面打通了智能体深度交互能力:问答交互式内联按钮 (Inline Keyboard)、Telegram 论坛话题 (Forum Topics) 独立会话隔离、代理连接支持 (HTTP/HTTPS/SOCKS5 与自定义 apiRoot)、单用户工作区目录安全隔离、6 位配对码鉴权防护以及语音条朗读回复 (TTS)。
展开完整文档(README 剩余 1 节)
📦 @goodandready/dsh-messenger-gateway
DeepSeek Harness Telegram 专属网关(支持交互按钮调度、论坛话题隔离与语音条回复)
🇬🇧 English •
🇷🇺 Русский •
🇨🇳 中文说明
⭐ 如果您喜欢这个插件,请在 GitHub 上为它点亮 Star — 这能让我知道插件对您有用,并鼓励我继续开发和维护它。
🐛 如果您发现 Bug 或希望增加功能,请使用任意语言在 GitHub 上提交 Issue — 我会评估您的建议,并在后续版本中实现有价值的改进。
⚡ 插件概览
dsh-messenger-gateway 为 DeepSeek Harness 智能体提供企业级 Telegram 接入桥梁。
除常规对话转发外,本插件全面打通了智能体深度交互能力:问答交互式内联按钮 (Inline Keyboard)、Telegram 论坛话题 (Forum Topics) 独立会话隔离、代理连接支持 (HTTP/HTTPS/SOCKS5 与自定义 apiRoot)、单用户工作区目录安全隔离、6 位配对码鉴权防护以及语音条朗读回复 (TTS)。
graph LR
subgraph TelegramClient [Telegram 客户端 / 群组 / 话题]
User[👤 用户 / 论坛话题] --> TG[Telegram Bot API 轮询 / Webhook]
end
subgraph GatewayCore [网关调度核心]
TG --> Auth{配对码与权限校验}
Auth -->|已配对用户| Router{话题与目录路由器}
Router --> Home[独立工作目录: /homes/user_id]
Home --> Thread[DSH 隔离会话上下文]
end
subgraph AgentLoop [DSH 智能体执行流]
Thread --> Agent[智能体逻辑流]
Agent -->|ask_question 工具调用| Ask[Telegram 原生内联交互按钮]
Agent -->|语音回复合成| TTS[TTS 语音条消息下发]
end
subgraph Feedback [交互下发]
Ask --> TG
TTS --> TG
end
style TelegramClient fill:#1e1e2e,stroke:#89b4fa,stroke-width:2px,color:#cdd6f4
style GatewayCore fill:#181825,stroke:#cba6f7,stroke-width:2px,color:#cdd6f4
style AgentLoop fill:#11111b,stroke:#a6e3a1,stroke-width:2px,color:#cdd6f4
style Feedback fill:#181825,stroke:#f38ba8,stroke-width:2px,color:#cdd6f4
📦 安装指南
dsh plugin --profile web add @goodandready/dsh-messenger-gateway
📄 开源协议
MIT © GooDAnDReaDY预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
GooDAnDReaDY/dsh-messenger-gateway
Telegram 桥接 DeepSeek Harness:会话、steer、homes 和 TTS 语音消息
相关插件 · 平台集成
智能体工程课walkinglabs/learn-harness-engineering
一门项目制课程,教你搭建环境、管理状态、做验证、加控制机制,让 AI 编程智能体稳定干活。
★ 21,155已汉化DSH
71.7
视频翻译配音liuzhao1225/YouDub-webui
开源视频本地化工作台:导入视频,识别、翻译并逐句克隆原声,生成字幕和配音成片。
★ 5,778已汉化Cordis
71.4
失败经验库Ikalus1988/MisakaNet
📚 零依赖、由 git 支撑的微课程库,让 AI 智能体异步分享并检索经过验证的调试经验。| https://misakanet.org
★ 550已汉化DSH
71.2
桌面智能体工作区freestylefly/wesight
WeSight 是开源桌面控制台,面向本地 AI 智能体。它帮你安装或复用 Claude…
★ 933已汉化MCP
71
IM 机器人接入xmanrui/dsh-im
让 DeepSeek Harness 触手可及 Connecting DeepSeek Harness
★ 3,110已汉化DeepSeek 客户端
70.9
中国平台研究引擎Jesseovo/last30days-skill-cn
给 AI Agent 的中文互联网研究 Skill:检索 8 大平台最近 30…
★ 2,031已汉化DSH
70.7