SMMURDA/dsh-paean-telegram ↗★ 1
dsh-telegram
通过手机端进行会话管理的TG桥接器 适合需要通过手机Telegram远程聊天、管理会话和工作区的用户。
同名套件的其他儲存庫
安裝
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:SMMURDA/dsh-paean-telegram說明文件
閱讀完整 README ↗4. create /.pi/telegram.json with your chat id (see Configuration)
Configuration
Configuration lives in /.pi/telegram.json (one file per workspace root). Every
key is optional; missing keys fall back to the defaults below. The file is validated on load and
can be changed live from the chat with /config get and /config set .
| Key | Type | Default | Meaning |
|---|---|---|---|
security.allowedChatIds | number[] | [] | Chat-id whitelist for inbound traffic. Empty means every inbound chat is rejected. |
security.browseRoots | string[] | absent | Optional absolute-path whitelist confining host/workspace browsing (/ls, /mkdir, /open, workspace create). Absent = unconstrained. |
security.selfAllow | boolean | enabled (absent) | Kill switch for the self-service bootstrap: the "Allow this chat" button on the unauthorized prompt. false makes that tap answer with the refusal text and never touch the roster. |
watch.autoStart | boolean | false | Start long polling automatically when the plugin mounts. |
inbound.defaultMode | "auto-handle" | "queue-only" | "muted" | "auto-handle" | How inbound chat text is treated before it reaches the agent. |
inbound.rules | {chatId?, pattern?, mode}[] | [] | Ordered rules; the first match wins, otherwise inbound.defaultMode. pattern is a case-insensitive substring. |
outbound.parseMode | "HTML" | "HTML" | Telegram parse mode for assistant output. Model Markdown is normalized to valid Telegram HTML first; cards are always HTML. |
outbound.disableNotification | boolean | false | Send silently. |
outbound.maxRetries | number | 3 | Per-message retries on 429 / network errors. |
outbound.sendRatePerSecond | number | 20 | Global send budget (the Bot API safe bound is 30). |
outbound.maxMessageLength | number | 4096 | Hard cap for one payload; longer text is split into parts. |
outbound.liveFeed | boolean | true | One message edited in place while a turn streams (thinking + tool-call visibility). Can be toggled without a restart. |
compact.threshold | number | 0.8 | Compact when the latest request uses more than this fraction of the context window. |
compact.policy | "auto" | "ask" | "never" | "ask" | Compact automatically, ask first, or stay quiet. |
compact.cooldownMs | number | 300000 | Minimum interval between two triggers for one session. |
workspace.activePath | string | absent (boot dir) | Active project folder; new sessions are created under it. Set it from the chat with /project. |
mode.name | string | "" | Optional display label for the status card. |
model.provider / model.model | string | profile default | Telegram-owned default model, so the bot can run a different model than the web keeps. |
reasoning.effort | "minimal" | "low" | "medium" | "high" | "max" | medium | Per-chat reasoning effort; a directive is prepended to inbound messages. |
media.transcribe.baseUrl | string | provider default | OpenAI-compatible transcription endpoint for voice notes. |
media.transcribe.apiKey | string | absent | Missing key = transcription disabled, with guidance instead of a silent drop. |
media.transcribe.model | string | package default | Transcription model name. |
interactive.userQuestions | "both" | "telegram" | "web" | "auto" | "both" | Which UI owns ask_user_question and approval cards. both mirrors them to Telegram and the web; whichever side answers first settles the other. |
interactive.allowByTool | string[] | [] | Tool names permanently auto-allowed after "Allow forever (by tool)". Revoke with /config set interactive.allowByTool []. |
notify.onComplete | boolean | true | Send a fresh receipt (with sound) when a goal turn finishes. |
notify.onLongTask | boolean | true | Edit the progress card every 30 s so elapsed time keeps moving. |
Minimal working file:
{
"security": { "allowedChatIds": [123456789] },
"watch": { "autoStart": true }
}