jelech
dsh-im-gateway
An IM gateway for the DeepSeek Harness: bridge messengers into harness agent sessions and control them with slash commands.
- Stars
- 2
- Language
- JavaScript
- Created
- Aug 14, 2026
- Updated
- Aug 14, 2026
Introduction
dsh-im-gateway
An IM gateway for the DeepSeek Harness: bridge messengers into harness agent sessions and control them with slash commands.
- WeChat via Tencent's official iLink Bot transport (the same one OpenClaw's
@tencent-weixin/openclaw-weixinuses) — QR login, long-poll, no public endpoint/ngrok required. - Slash commands modeled on Hermes Agent's messaging interface:
/new,/sessions,/status,/model, … - One agent session per peer: every IM contact gets its own harness agent (same model, tools, workspace), so conversations have memory and stay isolated.
Architecture
IM (WeChat iLink)
│ QR login + long-poll (native fetch)
▼
dsh-im-gateway (host plugin, one per process)
├── channel registry lib/channels/wechat-ilink.js ← transport adapters
├── peer → session map lib/gateway.js ← agent lifecycle
├── slash commands lib/commands.js
└── HTTP bridge lib/http.js ← browser panel
│
▼
harness agents service → agent session → model/tools/workspace
Two halves, per the harness convention:
- Host (
index.js,lib/): the gateway. Runs once per process because the channel token and peer→session map must be shared, not per-session. - Client (
client.js): an optional browser "IM 网关" settings section (QR login, status, test). Discovered automatically via the package'sdsh.clientdeclaration.
Commands
| Command | Action |
|---|---|
/help | List commands |
/new (or /reset) | Archive the current session and start a fresh one |
/sessions | List current + archived sessions for this peer |
/status | Show connection, model, and current session |
/model [provider:model] | Show current model, or switch (provider:model) into a new session |
Roadmap: /retry, /undo, /compress, /usage, /personality, /stop (interrupt), and skill invocation.
Install
This is a Cordis plugin package that targets the harness host plane. It declares dsh.bundle, so the official dsh plugin command installs it and composes it automatically — no manual composition edit.
From GitHub (before/without npm publish)
dsh plugin --profile web add github:jelech/dsh-im-gateway
dsh plugin forwards to pnpm add, and github:user/repo is a native pnpm spec. The package's dsh.bundle declaration then joins it to the profile's bundle layers automatically (this package has no prepare/build script, so no allowBuilds step is needed).
From the npm registry (after publishing)
dsh plugin --profile web add dsh-im-gateway
From a local checkout
dsh plugin --profile web add file:/absolute/path/to/dsh-im-gateway
Restart the harness after installing (composition is read at boot). The gateway registers an imGateway service and, if the profile provides webServer, exposes /im-gateway/* plus the settings section.
For a manual install instead of dsh plugin, the equivalent is pnpm add dsh-im-gateway from the profile directory plus merging the insert row in cordis.patch.yml (see cordis.patch.yml in this repo).
Login
- Open 设置 → IM 网关 → 扫码登录微信 (browser), or call
gateway.login()and scan the QR printed to the host console. - Scan with WeChat and confirm. The token is held in memory for the process lifetime.
- Message the bot. Text messages are answered by the harness agent;
/-prefixed messages are commands.
Notes & limitations
- Text only for now. Media (image/voice/file) requires the iLink CDN AES-128-ECB path; it's isolated behind the channel interface and can be added without touching the gateway core.
- iOS needs WeChat ≈ 8.0.70; Android may prompt for a WeChat update first (iLink requirement).
- The browser panel renders the login QR locally on the host (via the
qrcodenpm package, served as SVG from/im-gateway/qrcode) — no third-party QR service and no external network round-trip for the login link. - The
/im-gateway/*HTTP bridge registers raw routes on the harness web server; if your deployment enforces HTTP auth above the route layer, add it inlib/http.js.
License
MIT