dsh 的独立手机端界面:扫码配对设备信任、实时 SSE 同步、三通道完成通知(应用内 / Web Push / Server酱·Bark·Telegram)、离线发件箱、审批与提问面板、多提供方用量卡、PWA;从零为窄屏设计的原生手机 UI。
安装
# npm 包(预构建)
dsh plugin --profile web add @eternalloveone/dsh-palm
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:Eternalloveone/dsh-palm#path:/packages/dsh-palm
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
该插件的 README 只有英文版本。
dsh in your palm — the standalone mobile surface for the dsh web GUI: scan-to-pair device trust, the /m/ phone UI, the /m/api RPC channel with a realtime SSE mux bridge, and a polished desktop pairing panel.
Derived from dsh-remote-web-ui — see NOTICE for attribution.
Install
Requires dsh >= 0.1.5-rc.1 (tested against 0.1.5-rc.2). See the repository-level COMPATIBILITY.md for the version matrix.
dsh plugin --profile web add @eternalloveone/dsh-palm
v1.3.0 note: devices paired by older dsh-palm / dsh-remote-web-ui versions do not carry over (the store moved to
dsh-palm-devices.json, the settings namespace was renamed) — re-pair phones once after upgrading.
Highlights
- Standalone
/m/mobile UI — an independent phone bundle, not a CSS-injected adaptation - Desktop-phone live sync — one shared host event stream (measured: loopback 4 ms / public tunnel 9 ms / Tailscale 13 ms median)
- SSE mux bridge with polling fallback — stall detection (36 s) arms adaptive history polling; events are never lost
- Windowed streaming renderer — inline-markdown tail preview, no typewriter cursor, collapsible reasoning blocks
- Interactive diff cards, code actions, command cards, realtime approval panels, image attach, voice transcription, plugin market
- PWA + offline outbox + gzip-compressed API responses — weak-network friendly
- Completion notifications — task-finished and long-reply alerts through three layers: in-app system notifications (SSE), Web Push (VAPID), and third-party channels (WxPusher, Server酱 / Bark / Telegram, plus a demoted legacy PushPlus) for when the app is closed; thresholds and cooldowns are configurable from the phone, with per-kind gates (plan-complete / background-task / long-reply) and a lock-screen privacy toggle
- Global search with message-level locate — search workspaces and every session from the home page, or the current workspace from the session list; hits open the chat and scroll to the matched message with a one-shot highlight (Chinese short words covered by a substring backfill)
- Pending-message queue dock — messages sent while a turn is running queue in the host and show as a dock above the composer (desktop QueueDock parity): editable, removable, or steered in as an interrupt
- Turn navigation — a floating handle (当前 / 总轮) appears once you scroll away from the newest message: tap it for the turn list (prompt + reply previews, unloaded turns paged in first) or drag sideways to scrub and release on the turn you want; the list merges the host
turnOutlineprojection with local turns, so the whole session — 172 turns included — is reachable - Global run overview — a full-screen cross-session view of running sessions, live background jobs and the subagents a session is waiting for, reachable from the home page's quick chip with a live badge
- Error self-rescue — a render crash shows a readable error page with retry / reload instead of a white screen; window errors, unhandled rejections and failed resource loads collect into a bounded ring that the host can forward to your configured channel
- Eviction-resistant storage — after the first cache write the app asks for persistent storage, so a backgrounded PWA does not silently lose its history cache
- Jank vs suspension — a Long Task observer plus hidden-window bookkeeping reports
suspension.hiddenMs, so "the app stuttered" and "the phone froze us" stop being the same measurement; a capture carries the error ring and the storage picture too - In-chat file & image preview — file-path links open a bottom sheet: markdown renders formatted, HTML renders in a sandboxed iframe, code highlights, images display inline; message images open a full-screen lightbox
- Per-provider usage & balances — one settings card per provider: consumed-quota meters, account balances and OpenRouter's spent-vs-limit, refreshed on demand
- Six-digit pairing code — type a code on the phone instead of scanning
- Three-step pairing wizard — configure → pair → use, with tunnel detection (Tailscale one-click, frp entry from
frpc.toml), reachability-checked saving, and a clean device-management view once paired - Workspace-native theming — the panel follows the system light/dark scheme via
prefers-color-scheme
Full feature list, measured data and architecture docs: see the repository README.
Remote access setup
The desktop pairing panel (the phone icon in the sidebar) walks you through three steps: configure → pair → use. To reach this computer from your phone you need an address the phone can reach:
- Same network — start dsh web bound to your LAN address; the phone pairs over Wi-Fi with zero configuration.
- Tailscale — install Tailscale on this computer and your phone; the panel detects it and fills your tailnet address with one click.
- Cloudflare Tunnel / frp — run a tunnel to this machine and enter its public URL in the panel's public-address card. Saving verifies reachability first, so a dead tunnel is caught before it is persisted.
A full walkthrough with a worked frp topology (server frps + nginx TLS, client frpc, panel configuration, verification, and FAQ) lives in the remote access guide.
License
Apache-2.0 — see LICENSE.
链接
同类插件
zhu1090093659/dsh-web#packages/dsh-remote-web-ui★ 8801
手机/PC 远程操控 dsh web 工作区:扫码配对、令牌门控通道、SSE 实时同步,提供移动端与完整桌面 GUI 两种远程形态。
zhu1090093659/dsh-web#packages/dsh-ssh★ 8801
SSH 远程运维面板:Web 终端、SFTP 传输、本地端口转发与一条命令并发集群执行,Agent 与面板共用同一份主机配置。
saya-ch/dsh-mobile★ 469
通过 Android App 或手机浏览器访问 DeepSeek Harness,支持安全局域网连接、远程访问、持久设备配对和可自定义移动界面。
liguobao/ds-harness-remote★ 336
DeepSeek Harness 多端远程访问:从手机、平板、浏览器或另一台电脑继续进行中的会话,端到端加密通道(Noise IK + 自适应 Relay/WebRTC 传输),设备授权管理;远程端仅开放 ApiProxy 能力,支持 dsh-file-viewer 只读文件预览,不提供 Shell、远程桌面或写入权限。
ZSeven-W/dsh-ios★ 326
在对话里直接操作 iOS 模拟器或 USB 连接的 iPhone:22 个 Agent 工具用于启动、构建、按无障碍标识或 OCR 文本驱动 UI、列表行操作与 SwiftUI 预览热重载,并附带可点击拖拽的流式侧边栏面板。
wenbin-wb/dsh-bridge★ 199
DeepSeek Harness 远程与移动端接入插件:提供局域网扫码直连、Cloudflare 与自建公网隧道,以及微信、QQ、飞书、Telegram 机器人交互,内置安全认证与访问控制。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。