- Add lib/ (plain-ESM plugin code, no build step) so the published tarball actually contains the plugin; un-ignore lib/ for this package - Sync README: voice/audio transcription via home-lab Whishper (default large-v2, device cuda, language auto), /chats pagination and subagent hiding, whisper* config keys, updated security note
5.7 KiB
🤖 dsh-telegram-remote
Full remote control + live state visibility for the DeepSeek Harness — from Telegram.
Turn any Telegram chat into a pocket terminal for your harness: chat with your AI, watch replies stream live (thinking → tools → text), run commands, manage chats/subagents/goals/jobs, and control every harness feature — all through one bot with zero external services (direct Bot API long polling).
✨ Features
- 💬 Chat from Telegram — send a message, get a live-streamed structured reply (thinking, tools, final answer) edited in place
- 🎙️ Voice & audio — send a voice message or audio file; it is transcribed through your home-lab Whisper server (default
large-v2on CUDA GPU) and the text is sent to your AI - 🎛 Full harness control — 49 commands: chats, models, sessions, subagents, goals, jobs, files, PowerShell, exports, presets, skills, settings, credentials, permissions, and more
- 📡 Live state — status, running turns, queued messages (steer / edit / remove), background jobs
- 🔐 Permission-aware — sandbox read/write/full control per chat, approval buttons for risky tools
- 🔔 Notifications — per-chat on/off/all, background activity pushed to you
- 🔄 Hot reload — plugin edits hot-reload with no restart (HMR)
- 🔒 Single-instance — a lock file guarantees exactly one poller per bot token (no Telegram 409s)
- 🖥 Works everywhere — long polling means no public IP / no webhooks / works behind NAT
📦 Requirements
- Node.js >= 22 (uses global
fetch) - A DeepSeek Harness installation with a profile (e.g.
web) - A Telegram bot token from @BotFather
🚀 Installation
-
Install the plugin into your harness profiles:
# from your harness profile dir (e.g. ~/.dsh/profiles/web) npm install link:path/to/dsh-telegram-remoteOr add it to the profile's
package.json:{ "dependencies": { "dsh-telegram-remote": "link:C:/path/to/dsh-telegram-remote" } } -
Add the plugin to the profile patch (
cordis.patch.yml):- insert: - id: telegram-remote name: 'dsh-telegram-remote' config: tokenFile: 'C:\path\to\telegram.token' # file containing the bot token ownerChatId: 123456789 # YOUR telegram user id (get it from /whoami) workspaceRoot: 'C:\path\to\workspace' allowEval: true notifyOnStartup: true -
Create the token file (or set
tokenEnvinstead):Set-Content -Path telegram.token -Value "123456:ABC-your-bot-token" -NoNewline -
Start the harness, open the chat with your bot, and send
/start.
⚙️ Configuration
| Key | Default | Description |
|---|---|---|
botToken |
"" |
Token directly (alternative to a file/env) |
tokenEnv |
"TELEGRAM_BOT_TOKEN" |
Env var holding the token |
tokenFile |
"" |
File containing the token |
ownerChatId |
undefined |
Your Telegram user id — full access |
allowedUserIds |
[] |
Extra users allowed to chat |
workspaceRoot |
process.cwd() |
Where /new chats start |
allowEval |
true |
Enable /eval (runs JS in the harness) |
notifyOnStartup |
true |
Send a "bot online" message on boot |
stateFile / logFile |
~/.dsh/... |
Override runtime state / log paths |
whisperBaseUrl |
"http://192.168.31.159:8082" |
Home-lab Whishper server base URL |
whisperModel |
"large-v2" |
Whisper model used for transcription |
whisperDevice |
"cuda" |
Whishper device (cuda or cpu; GPU is cuda) |
whisperLanguage |
"auto" |
Language hint ("auto" = auto-detect; e.g. ru, en) |
whisperTimeoutMs |
120000 |
Max wait for a transcription to finish |
whisperMaxBytes |
20971520 |
Max accepted audio size in bytes (20 MiB) |
💬 Usage
Just type a message — it goes to your AI and the reply streams back:
💭 Thinking
<live reasoning…>
🔧 Tools
⋯ write ✅ read
🤖 Reply
<live streaming text…>
─────── ⋆⋅☆⋅⋆ ───────
⏳ 34s
Tap the /start keyboard or type /help for the full command list. Key commands:
/chats·/new·/open— manage chats (/chatsshows 10 at a time,/chats 2pages; subagent chats are hidden)/model·/models— switch AI models (/model maxfor deepest thinking)/status— what's happening right now/queue/steer/edit/remove— control queued messages/cmd/fs/mkdir— run commands and manage files/agents/send/interrupt— subagents/goal— long-running objectives/jobs/kill— background tasks/export/search/archive— conversation history/permission— sandbox mode per chat/eval/raw/api— power-user harness access/reboot/shutdown— harness lifecycle (graceful)
🔒 Security notes
- The bot can control your computer — only add users you trust (
ownerChatId/allowedUserIds). - Every request is checked against the per-chat
/permissionmode; risky tools request approval. /evaland/cmdare powerful — considerallowEval: falseunless you need them.- No telemetry: the bot talks to Telegram, your harness, and (for voice/audio) your home-lab Whishper server only.
🔄 Hot reload (development)
With the harness HMR enabled, editing this plugin's lib/*.js files reloads it in ~2s:
- id: hmr
disabled: false
config:
root: ['C:\path\to\dsh-telegram-remote']
ignored: []
📄 License
MIT