DeepSeek Harness 插件

dsh-im-hub-media

Multi-platform IM gateway for DeepSeek Harness (fork of dsh-im-hub with media): Telegram voice/photo/document/video + reply handling, STT (Deepgram primary, HF Whisper fallback), outbound MEDIA:(英文原文)

跳到安装方式

来源信息

GitHub 仓库
GooDAnDReaDY/dsh-im-hub-media
最近更新
2026年8月18日
分类
工具与能力
GitHub stars
0
载体类型
plugin
目录证据
上游声明已找到 dsh.bundle
证据路径
package.json#dsh.bundle
核对版本
0.1.0-rc.8
上游核对日期
2026-08-20

该证据由上游目录提供。本站没有安装、运行或安全审核这个插件。

安装

默认先复制一段 Prompt,让 Agent 读 GitHub 仓库和源码;需要自己装时再切到命令。

复制这段 Prompt,发给 DSH、Codex 或其他 Agent,让它先读 GitHub 仓库和源码。

请先不要安装或执行任何命令。阅读这个插件的 GitHub 仓库、README 和关键源码,然后用清楚、直接的方式回答以下问题,帮助我判断它是否适合我的需求:

1. 这个插件是什么,解决什么问题;
2. 适合哪些用户和典型使用场景;
3. 安装后如何使用,并给出一个最小使用示例;
4. 有哪些已知限制,以及隐私、安全、兼容性或维护风险;
5. 给出“推荐 / 有条件推荐 / 不推荐”的明确建议和理由。

请区分仓库明确说明、根据源码推断和未知信息。证据不足时请明确说明,不要猜测或照抄 README。

GitHub:https://github.com/GooDAnDReaDY/dsh-im-hub-media
插件名:dsh-im-hub-media
作者:GooDAnDReaDY

检查来源文件

安装前先看这个插件目录里的 README 和其他文件。

文件资源管理器3 个文件
README.md来源说明 · 只读预览

dsh-im-hub-media

Telegram-first fork of dsh-im-hub for DeepSeek Harness (dsh) that adds media support to the multi-platform IM gateway. Talk to your dsh agent from Telegram (voice, photos, documents, video, replies), with Feishu/Lark and WeCom kept from the original.

> One agent per chat. Multi-turn context. Whitelist access control. Idle reaping. All the dsh-im-hub adapters, plus a media pipeline on Telegram.

What's added vs. dsh-im-hub

AreaFeature
MediaIncoming photos / voice / documents / video are downloaded to a local cache; supported docs are injected inline or kept for the agent.
Voice → text (STT)Voice messages transcribed automatically: Deepgram primary (api.deepgram.com), HuggingFace Whisper (openai/whisper-large-v3) fallback.
On-device visionPhotos without a caption are routed to a vision model (see dsh-vision-bridge) instead of failing a text-only turn.
Outbound mediaAgents can emit MEDIA:<path> markers and the bot sends the file back into the chat.
Reply handlingTelegram reply_to_message is passed through so the agent can answer in-context.

Supported inbound document types follow the Hermes allowlist: PDF, Markdown, plain text, CSV, logs, JSON/XML/YAML/TOML/INI/CFG, archives, and Office (doc/xls/ppt + x). Upper 20 MB bound (public Bot API cap).

Install

# From npm after publishing:
dsh plugin --profile web add @goodandready/dsh-im-hub-media

# From GitHub:
dsh plugin --profile web add github:GooDAnDReaDY/dsh-im-hub-media

# Locally from a checkout:
dsh plugin --profile web add /path/to/dsh-im-hub-media

Restart the Web UI afterwards.

The plugin row is disabled by default — enable it and add your credentials in the profile's cordis.patch.yml:

- id: dsh-im-hub-media
  disabled: false
  config:
    adapters:
      telegram:
        enabled: true
        token: '123456:ABC-DEF...'      # from @BotFather
        allowedUserIds: []              # empty = everyone (set in production)
    media:
      stt:
        deepgramApiKey: ''              # optional STT; needs a Deepgram key
        # hfApiKey: ''                  # optional HuggingFace Whisper fallback

Configure

Web GUI (recommended)

A settings card appears at Settings → Plugins → Configurable plugins → IM Gateway. It edits the same configuration live — no restart needed (the bridge hot-reloads on save). Credential fields are stored server-side and shown as write-only "configured / not set" badges.

Adapters (kept from dsh-im-hub)

AdapterDefaultDescription
adapters.telegram.enabledfalseTelegram Bot API long polling; token from @BotFather.
adapters.telegram.allowedUserIds[]Numeric Telegram user ids; empty = everyone.
adapters.feishu.enabled / appId / appSecretfalse/''Feishu adapter (mode: websocket by default, no public URL; webhook = HTTP callback).
adapters.lark.*International Lark edition (open.larksuite.com), same shape as Feishu.
adapters.wecom.*WeCom app-message callback (corpId/corpSecret/agentId + token/encodingAesKey).
adapters.mock.enabled / portfalse/0Test-only adapter (stdin + local HTTP; 0 = ephemeral port).

See dsh-im-hub upstream README for the full adapter reference.

media schema (new in this fork)

FieldDefaultDescription
media.stt.deepgramApiKey'' (secret)Deepgram API key for voice→text. Empty = skip Deepgram.
media.stt.deepgramModelnova-2Deepgram model.
media.stt.languageruSTT language hint (BCP-47).
media.stt.hfApiKey'' (secret)HuggingFace token for the Whisper fallback. Empty = skip.
media.stt.hfModelopenai/whisper-large-v3HuggingFace Whisper model id.
media.maxDocBytes20 1024 1024Max inbound document bytes.
media.maxTextInjectBytes100 * 1024Max text-file bytes injected inline into the agent message.
media.cacheDir~/.dsh/im-hub-media/cacheLocal cache dir for downloaded media (defaults to the user home).

Example settings.yaml

dsh-im-hub-media:
  adapters:
    telegram:
      enabled: true
      token: '<bot token>'
  media:
    stt:
      deepgramApiKey: '<deepgram key>'
      language: ru

Usage

From Telegram, just message your bot:

  • Voice → transcribed by Deepgram/Whisper and sent to the agent as text.
  • Photo/Videos → downloaded; handled via vision if there's no caption.
  • Document / short text files → split inline or kept for the agent (respecting maxTextInjectBytes).
  • /help, /reset, /status, /model → Slack-style commands.

The agent can send media back by emitting a MEDIA:<absolute path> marker in its message.

Commands

CommandEffect
/helpShow command help.
/resetClear this chat's conversation context (fresh agent).
/statusShow active chats / agents / adapters.
/modelShow the current model selection.

Structure

dsh-im-hub-media/
├── package.json            # dsh bundle/plugin metadata + peerDependencies
├── cordis.patch.yml        # bundle layer: plugin row (disabled by default)
├── lib/index.js            # host: settings schema + Bridge wiring (media cache)
├── lib/bridge.js           # per-chat agent lifecycle
├── lib/media.js            # document classification + outbound MEDIA markers
├── lib/stt.js              # Deepgram + HuggingFace Whisper transcription
├── lib/client.js           # browser: settings card in the Web GUI
├── lib/adapters/*          # telegram / feishu(+lark) / wecom / mock
├── README.md
└── LICENSE                 # MIT

Security notes

  • Force a whitelist. Set allowedUserIds on every enabled adapter before exposing the bot publicly. An empty list means anyone can drive your agent — which can execute tools on the host.
  • IM messages are injected into the agent session as plugin-originated user messages; they do not bypass the deployment's own approval/guardrail policy — treat them like any other user input.
  • Platform secrets (token, appSecret, encodingAesKey, STT keys) live in the profile's cordis.patch.yml / settings.yaml; keep that file private.
  • Media downloaded into cacheDir stays local; nothing is sent elsewhere except the agent conversation.

License

MIT

Credits

Fork of dsh-im-hub (MIT). All dsh-im-hub adapter logic and credit belong to the original author; this fork adds the Telegram media/STT/vision pipeline.