dsh-remote-workstation:把远程 SSH/SFTP 挂成 DSH 工作区

前言

DeepSeek Harness(DSH)的会话必须绑定一个本地目录作为工作区,这导致智能体在远程开发环境里无法直接读写文件。通常要么把整个环境拉到本地(不现实),要么绕过 ctx.fs 自己实现一套文件读写(增加复杂度)。

dsh-remote-workstation 插件通过一个「挂载」层,把远程 SSH/SFTP 服务器上的目录映射成 DSH 的工作区。侧栏出现一个 Remote 面板,你可以浏览远程主机、选择目录并挂载为工作区。挂载后,Files 标签、文件预览、以及 agent 的 read/write/edit 工具都直接操作远程文件,其他路径继续走本地磁盘。

如果你熟悉 VS Code 的 Remote-SSH,这个插件就是同一思路:在侧栏浏览服务器,选中文件夹,让 agent 在那里工作。

核心功能

1. 远程探索面板

侧栏新增 Remote 面板,提供:
- 主机选择器:列出已配置的 SSH 主机(从插件自己的 ~/.dsh/remote-workspaces-hosts.json 和 DSH 的 ~/.dsh/dsh-ssh.json 合并)
- 目录浏览器:浏览远程文件树,支持点击进入目录或输入路径回车
- 一键挂载:选中目录后点击「Mount as workspace」,将远程目录注册为 DSH 工作区

2. 工作区锚点

DSH 要求工作区是真实存在的本地目录。插件在 ~/.dsh/remote-workspaces/<host>/<path> 下创建一个空锚点,并将它映射到远程目录。所有文件操作通过 ctx.fs 的 resolve/listDir/readText/writeText/editText 等接口,底层实际走 SFTP。

3. 可插拔的文件系统

插件替换或扩展 ctx.fs,提供 union 文件系统:锚点路径走 SFTP,其他路径走本地文件系统。它基于 SandboxedFileSystem,因此原有的只读/工作区写/完全访问权限边界仍然生效。

4. 主机管理

在 Remote 面板中即可管理 SSH 主机:
- 添加主机:别名、主机地址、端口、用户名、认证方式(密码、私钥、或使用 SSH_AUTH_SOCK)
- 编辑主机:修改端口、用户、密钥路径等
- 测试连接:点击测试会连接一次,返回远程 home 目录和延迟,失败时显示原始错误

配置文件 ~/.dsh/remote-workspaces-hosts.json(权限 0600)存储主机的明文凭证(与 DSH 自身的 dsh-ssh.json 类似),插件优先读取自己的配置,再叠加 DSH 的配置。

5. 远程读写与编辑

write 和 edit 工具在远程工作区上与本地行为一致:
- 不存在则创建
- 基于版本检查的替换(防止过时写入被覆盖)
- editText 带歧义检测
- 沙箱权限限制仍然适用

6. 远程命令与搜索

插件提供了两个 agent 工具:
- remote_exec:在已挂载的服务器上运行命令(构建、测试、git 等)
- remote_search:在远程目录下 grep,返回 path:line 格式的匹配结果

这让 agent 在远程环境里也能执行构建和搜索,无需回退到本地。

7. 远程 Git 操作

remote_git 工具可在已挂载的远程仓库中执行只读 Git 命令:status、diff、log、show、branch、rev-parse、ls-files、blame、stash。

8. 实时刷新与预览

  • 远程 watch 通过轮询文件属性实现(默认间隔 2 秒),外部修改会自动反映到 Files 标签和预览窗口
  • readByteRange/readBytes 直接从 SFTP 读取,因此图片/PDF/Excel/Office 等预览无需先下载

9. 权限与沙箱

插件的远程读写和远程命令会遵守调用会话的权限预设和审批策略,自动审核像其他工具一样。

10. 可选远程 Shell

通过一个补丁,当 agent 的 cwd 处于锚点内时,其 bash/pwsh 命令会自动路由到远程服务器执行,让构建和测试套件在代码所在环境运行(需要额外补丁,见文档)。

安装与启用

插件依赖 DeepSeek Harness >= 0.2.1-rc.2,并需要 Node.js ^22.19.0 || >=24。

从 GitHub 安装:

dsh plugin --profile web add github:MingTXin/dsh-remote-workstation

安装后重启 DSH Desktop 或 dsh web,插件会在启动时挂载,客户端代码支持热重载。

典型用法

  1. 侧栏 → Remote
  2. 选择一个已配置的主机(或点击 + Add host 填写别名/主机/端口/用户/认证信息)
  3. 浏览到目标目录(点击文件夹或输入路径回车)
  4. 点击 Mount as workspace
  5. 从侧栏打开该工作区,切换到 Files 标签,即可看到远程目录内容
  6. 启动会话后,agent 的 read/write/edit 工具将操作远程文件,remote_exec 和 remote_search 也会走远程

适用场景与注意

适合需要通过 DSH 访问远程开发环境、服务器代码库或 CI 构建目录的开发者和 AI 助手。

注意:
- 插件以当前 DSH 进程的权限运行,安装前建议查看源码与许可证
- 所有凭证存储在本地配置文件(~/.dsh/remote-workspaces-hosts.json),权限应设为 0600
- 远程 watch 通过轮询实现,高并发写入场景可能有延迟
- 远程 Shell 路由需要额外补丁,并非开箱即用

结尾

dsh-remote-workstation 让 DSH 不再局限于本地文件系统,可以在远程服务器上像操作本地目录一样工作。通过挂载、锚点和统一文件系统接口,agent 可以直接读写远程文件、执行远程命令和 Git 操作,从而更自然地融入远程开发流程。

  • 插件目录:https://www.skillhub.cn/plugins/MingTXin/dsh-remote-workstation
  • GitHub:https://github.com/MingTXin/dsh-remote-workstation
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye