中文EN

dsh-remote-bridge

remote已测通过npmAGPL-3.0-only

把 DSH 内核的私有 remote 协议翻译成版本化 REST 接口(聊天、会话、文件、设备),供 Android 客户端 dsh-companion 等受信任客户端使用;桌面端在 DSH 设置里提供「手机设置」面板:主列表五张卡(远程访问 / 外网隧道 / 设备 / 回收站 / App 下载),另有「高级设置」组收纳授权根目录、识图与插件三项。

下载量 / Downloads
5,131
依赖体积 / node_modules
31.37 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

安装

dsh plugin --profile web add dsh-remote-bridge

沙箱测试结果

阶段结果
1 安装✓
2 列装✓
3 挂载✓
4 启动—

四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。

README

dsh-remote-bridge

<p align="center">

<strong>人已经出门,电脑还锁着 —— 掏出手机,继续用这台机器。</strong><br>

把 DSH 内核的私有 remote 协议翻译成版本化 REST,配上 Android 客户端

<a href="https://github.com/westanke/dsh-companion">dsh-companion</a>,

聊天、会话、文件、设备全程留在同一台机器上。

</p>

<p align="center">

<img src="assets/promo-16x9.png" alt="dsh-remote-bridge:手机设置面板(主列表五张卡片 + 高级设置组)" width="100%">

</p>

<p align="center">

<code>dsh plugin --profile web add dsh-remote-bridge</code>

</p>

<p align="center">

<a href="./README.en.md">English</a> ·

<img alt="Version" src="https://img.shields.io/badge/version-v2.10.0-087f8c">

<img alt="DSH plugin" src="https://img.shields.io/badge/DeepSeek_Harness-plugin-1f2328">

<img alt="Platforms" src="https://img.shields.io/badge/platform-Windows%20%7C%20macOS%20%7C%20Linux-586069">

<img alt="License" src="https://img.shields.io/badge/license-AGPL--3.0-2da44e">

</p>

dsh-remote-bridge 是 DeepSeek Harness(DSH)的远程访问桥接插件:它把 DSH 内核的私有 remote 协议翻译成版本化的 REST 接口,让 dsh-companion(GitHub · Gitee)等受信任客户端在离开电脑后仍能使用同一套聊天、工作区与文件能力;桌面端在你的 DSH 设置里提供一个「手机设置」,内联折叠卡片:主列表五张(远程访问 / 外网隧道 / 设备 / 回收站 / App 下载),另有默认收起的「高级设置」组收纳根目录、识图与插件三项,每张卡片各自折叠、可多张同时展开。

它适合谁:把 DSH 当主力工具、但不想被「必须坐在电脑前」绑住的人。远程访问默认关闭,未启用时只监听回环地址——装完不会自动把机器暴露到局域网。

界面默认中文,可随时切换 English。插件支持 Windows、macOS 和 Linux,安装包已经包含编译产物,不要求用户在服务器上重新构建。

版本警告:请务必使用 ≥ v2.0.4 版本。
DSH 0.2.x 兼容性与 0.2.1-rc.2 适配结论涉及注入服务的取舍,篇幅较长,
统一放在 [兼容性与已知限制](#兼容性与已知限制) 一节,安装前建议扫一眼。

实际效果

桌面端的入口就在你的 DSH 设置里:打开设置,找到标题为「📱 手机设置」的一节,点进去直接内联渲染折叠卡片(主列表五张 + 一个「高级设置」组),不再另开弹窗。它只做设置。

远程访问默认关闭。管理员可在本机 WebUI 中设置绑定 IP、端口和新设备的初始权限。

关于这几张截图。 assets/screenshots/ 下的四张图由 scripts/generate-screenshots.ts 生成,它用与测试同一份产出来源渲染面板 —— ADMIN_TABS、WORKSPACE_CSS、APP_QR_CODES 全部取自 src/client/,所以你看到的是发布包里的标记与样式表,不是另画的示意图。图中呈现的是一台刚装好插件、尚未启用远程访问的机器,这是最诚实的默认状态。本 README 早前曾放过两张界面截图,但都摄于改名之前(标题还是「DSH 文件工作区」,远程访问那张还标着 v1.0.0,且把文件树与设置显示成上下两个弹窗),与上文描述的形态已不符,于是撤掉而不是留着误导。
市场会从 [screenshots.json](./screenshots.json) 自动取用这些图 —— 不必再来提 PR、不必等维护者。换了图直接推自己的仓库即可,下一次构建自动生效。

关于改名(2.0.4)

插件由 dsh-workspace 改名为 dsh-remote-bridge。改名理由是:旧名字比内容窄——插件实际承担的是「把 DSH 内核的私有 remote 协议翻译成版本化 REST,供手机端远程访问这台机器」再加一个设置中心,而「workspace」只是其中一页。

改名只动「安装时叫什么、bundle 叫什么」,以下几处对外契约刻意保持不变:

保持不变 · 位置 · 为什么不能改

REST 前缀 /dsh-workspace-api · src/host/server.ts · 已发布的 App 把它写死了

状态目录(dataDir,默认 dsh-workspace) · DSH profile 配置 · 换目录等于让用户的授权根配置与回收站全部消失

已不再列入契约的两项(2.2.0 随独立页一并退役):

  • 独立页路径 /dsh-workspace:该页面(文件树 + CodeMirror 编辑器)已删除,路径随之下线。注意它与 REST 前缀 /dsh-workspace-api 是两回事 —— 前缀还在,是 App 的对外契约;页面没了,不再承诺任何东西。
  • 浏览器存储键 dsh-workspace-device-token:它只被那个已删的页面读写过,现在全仓库(含 App)已无任何读写方。一个没人读的键不构成契约,所以不列入上表;键名本身也不回收,以免日后排查时多一个迷惑项。

所以安装后看到 REST 地址或状态目录里仍然是 dsh-workspace,是预期行为,不是改名没改干净。

快速安装

环境要求

  • 已安装并能正常启动的 DeepSeek Harness WebUI
  • DSH 内核 >=0.2.0-rc.2 <0.3.0(兼容 0.2.0-rc.2 及其后全部 0.2.x,含 0.2.1-rc.2;由本分支的兼容层支持,见 [DSH 0.2.x 兼容性适配说明](./docs/project/DSH-0.2-COMPAT.md))。

package.json 的 engines.dsh 已声明同一范围 —— 内核按 semver 裁决,不满足时该插件被禁用(宿主进程不退出),用户可按内核提示授予精确版本豁免。

  • Node.js ^22.19.0 或 >=24.0.0
  • 默认端口 3090 可用,或准备一个其他端口

使用运行 DSH WebUI 的同一系统用户执行。推荐用 npm 包名(三种方式装的是同一份产物):

# ① npm 包名(推荐:装的是预构建产物,不需要 pnpm 的构建授权)
dsh plugin --profile web add dsh-remote-bridge

# 国内镜像更快时,指定 registry
dsh plugin --profile web add dsh-remote-bridge --registry https://registry.npmmirror.com

# ② GitHub Release 的 tarball
dsh plugin --profile web add https://github.com/westanke/dsh-remote-bridge/releases/download/v2.7.1/dsh-remote-bridge-v2.7.1.tgz

# ③ Gitee Release 的 tarball(国内访问更快)
dsh plugin --profile web add https://gitee.com/westanke/dsh-remote-bridge/releases/download/v2.7.1/dsh-remote-bridge-v2.7.1.tgz

npx @deepseek-ai/dsh web
dsh plugin add 底层就是 pnpm add,因此 --registry 等 pnpm 选项可直接使用。
本 README 由 GitHub 与 Gitee 共用同一份文件,因此凡是必须带主机名的地址(安装命令、Release 下载)
都会把两站都列出来 —— 相对链接可以跟着站点走,但 /releases/download/... 没有相对形式。
npm 包名与 GitHub 上的仓库同名,两站看到的都一样。

重启 DSH 后,打开设置就能看到「手机设置」。它是纯设置,不含文件树;会话视图中工具轨迹旁的「文件」标签页已在 2.0.4 移除。桌面端不再有浏览或编辑文件的界面:独立页 /dsh-workspace 已在 2.2.0 删除,文件操作请走手机 App,或在会话里让 agent 用工具完成。

从 GitHub Release 下载离线安装包时,可直接安装 tarball:

dsh plugin --profile web add ./dsh-remote-bridge-v2.7.1.tgz

第一次使用

1. 打开 DSH 设置,进入「手机设置」;默认落在「根目录」页)。

2. 在「根目录」页默认添加允许管理的DSH当前目录。

3. 需要连接手机时,进入「远程访问」,填写绑定 IP 和端口并保存。

4. 点击“启用并创建配对”,再将十分钟内有效的一次性配对码填入 App。

5. 在手机 App 的文件页里选择授权根,即可浏览和编辑文件。

远程访问只有在至少存在一个授权根时才能开启。安装插件本身不会把服务暴露到局域网,未启用时只监听回环地址。

你可以做什么

桌面端不再有文件管理界面

2.2.0 删除了独立页 /dsh-workspace,包括整个文件树、上传下载入口和 CodeMirror 6 编辑器。原因是手机 App 的文件页已经原生覆盖同一套能力,桌面端这个页面没人用,却让发布包从 0.25 MB 撑到 1.72 MB。

代价要说清楚:现在在电脑上动文件只剩两条路 ——

1. 在会话里对 agent 说话,让它用工具读写文件;

2. 打开终端自己操作。

手机端不受影响:App 的文件页照旧可用,走的是插件保留的同一套 REST 文件接口(/dsh-workspace-api 前缀与 /roots、/roots/{rootId}/content 等端点一个都没删)。回收站里的删除记录现在只来自手机 App。

桌面端设置面板

入口在 DSH 设置里,标题为「手机设置」。设置区内联渲染,不另开弹窗;主列表五张折叠卡片平铺,可多张同时展开,默认展开「远程访问」;授权根目录、识图与插件这三项收在「高级设置」组里(根目录排第一,因为没它就没有可授权的落点),点开照旧能改:

分区 · 用途

根目录 · 添加、移除授权目录并设置显示名称;DSH 当前的工作区会作为默认根自动登记(不可删除,但可正常访问)

远程访问 · 设置绑定 IP / 端口,启用远程访问并创建配对码

设备 · 查看设备权限与根目录授权,随时撤销

识图 · 设置图片交接目录(识图路径),并只读展示出厂默认 .dsh-images 与兜底目录

回收站 · 查看与恢复被删除的条目(只列出来自手机 App 的删除记录)

插件 · 查看本 profile 装了哪些插件、启用或停用、检查更新,并能跳转到内核的插件列表

App 下载 · 扫码下载 Android 客户端,二维码指向两个站点的 Releases 列表页

图片交接:手机发的图,桌面也看得见

模型看不到图时(纯文本模型),本插件会在发消息之前把图存成工作区文件,消息里只留两样东西:一句人话(图存在哪、要看图怎么办)+ 一行给识图工具读的绝对路径。

现在 DSH WebUI 也会在该轮末尾把这张图画出来 —— 点击看原图、Escape 或点任意处关闭,图下面仍然保留那条路径。手机 App 那边一直可以显示,桌面这边此前只有一段文字;两边现在一致了。

  • 落点:<会话工作目录>/<识图路径>/<sha256>.<ext>,文件名是内容哈希,所以同一张图反复发不会堆副本(目录 0700、文件 0600)。
  • 识图路径默认 .dsh-images,在设置页「识图」里可以改,改完立即生效、不需要重启;「当前默认」那一栏是只读的 —— 历史交接消息和识图工具都按它写过路径,它不跟着你的修改走。旁边还列出解析不出会话工作目录时用的兜底目录。
  • 只认交接句式,而且只认**你自己发的那条消息*

…(truncated)

以上内容来自 npm 上的 README,我们只做格式化,不改内容。

版本

npm 上共发布:31,最后更新 2026-11-01

链接

GitHub · Homepage · npm

同类插件