插件目录 / UI & Skins / dsh-tunnelmux-remote
dsh-tunnelmux-remote
已验证 · 实测可装 kexuejin
功能简介
Mobile remote control for the DeepSeek Harness web GUI with TunnelMux as the tunnel backend: scan-to-pair QR, one-time tokens, revocable device sessions, mobile /m page.
可用 — 实测通过,早期项目
Mobile remote control for the DeepSeek Harness web GUI with TunnelMux as the tunnel backend: scan-to-pair QR, one-time tokens, revocable device sessions, mobile /m page. 实测能干净安装、正常启动。早期项目,但功能可用。
「已验证」表示我们的自动化 CI 在干净 profile 里实际执行了 dsh plugin add 并启动成功——仅此而已。功能描述与版本兼容性均为作者声明。这不是安全审计,也不代表对第三方代码的背书。
README
dsh-tunnelmux-remote
Mobile remote control for the DeepSeek Harness web GUI, with TunnelMux as the
tunnel backend. Scan a QR code beside the sidebar to pair your phone, chat
with your sessions from /m, and revoke any device at any time. The public URL
comes from the local TunnelMux control API (cloudflared/ngrok) — no embedded
tunnel binary in the plugin.
Built from scratch (2026-08-16) following the design in
TunnelMux docs/plans/2026-08-16-dsh-tunnelmux-remote-design.md
and referencing @linxin666/dsh-remote-web-ui (Apache-2.0) for the pairing model.
Features
- Scan-to-pair QR beside the official sidebar footer: one-time token, first
accept consumes it, refresh invalidates the old QR immediately. - Device sessions: HttpOnly cookie gate, presence tracking with offline
detection, max 4 devices (oldest evicted), revoke all with one click. - Mobile surface at
/m: session list (cursor pagination), create /
rename / history / prompt / models — bridged through the host apiProxy with a
strict method allowlist. - TunnelMux backend:
POST /v1/tunnel/startreturns the public URL
synchronously (daemon waits for provider startup); the plugin observes
status for the panel and never restarts the tunnel itself — the daemon ownsauto_restart. - Live updates: SSE
/api/pair/eventsfor the desktop panel and/m/api/events.muxfor the phone.
Install
Requires a running TunnelMux daemon (control API on 127.0.0.1:4765) and the DSH
web profile:
cd ~/.dsh/profiles/web
dsh plugin add github:kexuejin/dsh-tunnelmux-remote # or link:/path/to/this/repo
Or add to cordis.patch.yml manually:
- insert:
- id: tunnelmux-remote
name: dsh-tunnelmux-remote
Configuration (settings namespace tunnelmux-remote)
| key | default | meaning |
|---|---|---|
enabled |
true |
master switch |
tunnelmuxBaseUrl |
http://127.0.0.1:4765 |
TunnelMux control API |
tunnelmuxApiToken |
'' (secret) |
optional Bearer token |
targetUrl |
http://127.0.0.1:3080 |
local GUI the tunnel exposes |
tunnelProvider |
cloudflared |
cloudflared or ngrok |
autoTunnel |
false |
start the tunnel on plugin load |
publicBaseUrl |
'' |
existing public entry (skips auto-tunnel) |
tokenTtlMs / offlineAfterMs / maxDevices |
10min / 25s / 4 | pairing tuning |
cookieName |
dsh_pair |
device cookie |
mobileEnterToSend |
true |
Enter sends in the phone chat box |
Security model
- One active token;
issue()replaces it, so a fresh QR invalidates the
previous link immediately. - One-time accept; reuse returns
used(409). Tokens expire (default
10 min).stop()revokes every session and clears the token — the phone's
next gated request gets 403. - Fences: control endpoints (
issue/stop/events) are loopback-only;
phone endpoints (accept/heartbeat/status) allow loopback, LAN
literals, or the public tunnel Host. Accept is rate-limited per IP
(10 attempts / 30 s). - Mobile allowlist: only
workspace.list,session.*andmobile.preferencesare exposed over/m/api; everything else 403s.settings.*/credentials.*remain loopback-only host methods and are
never reachable from a phone.
Development
npm install
npm run typecheck # tsc client + host
npm test # vitest (48 tests)
npm run build # tsdown: lib/index.js (host) + lib/mobile.js + client/client.js
node test/smoke-live.mjs # read-only probe of a live daemon at 127.0.0.1:4765
License
Apache-2.0.
安装
装一次目录插件,之后本站所有插件都能让 DeepSeek Harness 自动找、自动装:
dsh plugin add dshbase-catalog 然后对 agent 说「帮我装 dsh-tunnelmux-remote」,它会在目录里找到并自动安装。文档:dshbase-catalog · 已验证场景包。
该插件是 GitHub 源码(未发 npm)——直接从仓库装:
Web profile:
dsh plugin --profile web add github:kexuejin/dsh-tunnelmux-remote Headless(CLI)profile:
dsh plugin --profile headless add github:kexuejin/dsh-tunnelmux-remote 实测报告
验证通过:从 GitHub 源码完成 L1 安装 + L2 加载 + L3 运行(dsh 0.1.0-rc.6)。