README.md

September 11, 2026 · View on GitHub

English · 中文

dsh-im

dsh-im icon

Plugin Center → Installed → IM bots: connect the local Harness to chat apps.

Feishu · WeChat · DingTalk · WeCom · QQ · Slack · Telegram · Discord · WhatsApp · AI Office

English · 中文 · xiaotaozi-dsh · THIRD_PARTY_NOTICES.md

MIT dsh-plugin DeepSeek Harness 0.1.2-rc.1

A DeepSeek Harness plugin. Scan a QR code, paste an App Manifest, or enter bot credentials. Each channel can hold several bots. Credentials stay in the Host credential store.

Runtime logic lives under src/channels/; Cordis RPC wiring is under src/host/; the Web UI is src/client/.

Part of the xiaotaozi-dsh monorepo. User-facing copy follows the Harness language (Chinese / English). Channel adapters come from xmanrui/dsh-im (MIT). See THIRD_PARTY_NOTICES.md. Do not dsh plugin add the repository root.

What it unlocks

  • Nine chat channels plus experimental AI Office. QR, App Manifest, or existing secrets, depending on the product.
  • Several bots per channel. Secrets never go in the client bundle.
  • Files in both directions. Chat files land in the current session workspace; results come back as native attachments.
  • Project selection while connecting. Select an existing Web project before the bot is fully online.
  • Bot commands in the chat. Switch projects, sessions, models, and presets without leaving the conversation.
  • Per-bot Agent Preset and role. Each bot carries its own toolset and a short scope instruction.
  • WeCom office on the robot card. Calendars, docs, and meetings are enabled per WeCom bot, never on a separate page.

Quick start

dsh plugin --profile web add github:kedoupi/xiaotaozi-dsh#path:plugins/im
dsh web

Then open Plugin Center → Installed → IM bots. The full channel manager is embedded here; there is no separate IM sidebar entry or channel settings column. Leave sandbox pnpm dev running while you edit; host restarts itself when lib/index.js changes.

See it

Channel hubCredential-free setup
IM bots in Plugin Center: WeChat selectedManual bot setup: paste a Bot Token, nothing else stored in the client

Channels

ChannelSetup
FeishuQR or App ID + Secret; streaming cards; group @/all-message mode; session watches
WeChatQR via Tencent iLink
DingTalkQR or Client ID + Secret; AI Card stream
WeComQR or Bot ID + Secret; office capability section on the robot card
QQQR or AppID + AppSecret; Markdown replies, one progress bubble in DMs
SlackApp Manifest + Bot/App tokens
TelegramBotFather token; optional DM allowlist; native Rich Messages (draft in DMs, in-place in groups/topics)
DiscordBot token. Enable Message Content Intent. Server text/announcement mentions open a Public Thread; grant Create Public Threads, Send Messages in Threads, Send Messages, and Read Message History. Result files also need Attach Files.
WhatsAppLinked-device QR (unofficial WhatsApp Web; use a dedicated number). Default access is Only me; Selected contacts and Open responses are available per bot.
AI OfficeOutbound heartbeat + SSE; experimental, off unless officeEnabled: true

Projects and sessions

  • Existing projects only. The picker lists only current Web projects; it never creates one. Cancelling leaves a new bot pending, so inbound work cannot fall back to the repository directory. WeCom project selection is not tied to authentication. Feishu provisioning failures stay failed (retry copy is translated); they do not keep spinning.
  • Bot commands in the chat. /help /new /status /models /model /presetlist /preset /stop /steer /compact /workspace /workspacelist /sessionlist /session. /workspacelist lists Web projects; /workspace switches by list number or unique project title.
  • Per-bot Agent Preset. Pick a preset in the IM hub or with /preset; new sessions follow it, existing chats need /new first.
  • Per-bot role / scope. A short instruction on the bot card, applied on every inbound turn. Project AGENTS.md stays shared; Agent Preset still owns the toolset.
  • WeCom final answers after approval. After an approval or follow-up question, the result is a new message. Updating the original thinking stream is not shown on WeCom.
  • Broken tool turns. Incomplete tool_calls history tells the user to /stop and start a new session instead of a generic unknown error. /new does not fix a Harness tool-scheduler crash (reading 'prepare'); see the product FAQ.

Files and results

Ordinary chat files (not just images) are staged into the current Harness session and show as an uploaded-file line plus a workspace path, not a raw JSON dump. Result files and images come back as native channel attachments with the dsh_im_return_file tool. Slack apps need files:write as well as files:read.

WeCom office boundary

WeCom chat is this plugin; WeCom office (calendars, docs, meetings) is dsh-wecom-office, enabled and managed on each WeCom robot card. With it installed, each WeCom robot card has an office section: enable office, switch the office bot explicitly, and manage the allow-write switch. One office bot at a time; it never follows which bot delivered a message. There is no separate office settings page.

Data and resilience

  • Credentials stay in the Host credential store; secrets never go in the client bundle.
  • Config defaults to loopback RPC, isolated channel failures, a 600000ms reply timeout, and a 20000ms connect timeout. QQ, WhatsApp, and Office are loaded on demand; agentPreset can provide the default preset.
  • English bot copy. Host language: en or DSH_IM_LANGUAGE=en switches prompts and command help. Untranslated strings stay Chinese.

Develop

AI Office is disabled by default. Enable it per profile with officeEnabled: true in Config (or office.enabled: true); the channel then also needs its own connector credentials.

From the monorepo root:

pnpm --filter dsh-im test
pnpm --filter dsh-im build
node scripts/link-plugin.mjs --profile web im
pnpm dev

Documentation

DocRead it when
THIRD_PARTY_NOTICES.mdUpstream MIT attribution
dsh-wecom-officeWeCom calendars, docs, meetings (managed on the robot card)
WorkflowCreate, install, simplify, commit
ConventionsPackage identity and two homes
xiaotaozi-dshThe rest of the monorepo

License

MIT