在 DeepSeek Harness (DSH) 的插件生态中,处理远程开发环境通常意味着手动通过 SSH 连接或同步本地文件。DSH 插件 dsh-rw 通过引入 Remote-SSH 风格的工作区,让智能体能够直接操作远程文件系统。该插件由 MDR-EX1000 维护,旨在消除本地与远程环境的割裂。
核心概念¶
dsh-rw 允许选择一个 SSH 主机和远程目录,使其成为原生的 DSH 工作区。代理通过 rw_* 工具(基于持久 ssh2 连接池的 SFTP/执行)直接在远程文件系统上工作。远程目录是单一真实来源:没有镜像,没有同步。
自 0.4.0 版本起,该插件实现了零配置。
核心功能¶
- 原生远程工作区选择器:在 DSH 的“添加工作区”流程中,通过模态框选择。界面分为 LOCAL(本地文件夹)和 REMOTE(Codex 风格页面)。远程页面支持从别名下拉菜单选择、自动填充
~/路径、实时过滤目录。 - 语言跟随 DSH 全局设置:选择器内的标签、提示、验证信息、加载状态和确认消息均支持中英文,并实时跟随 DSH 的全局语言设置。
- 从
~/.ssh/config读取主机:无需额外配置。现有的 SSH 别名会自动显示,文件变更时自动重读。密码认证的主机可通过界面添加,并存储为本地 0600 权限文件。 - 真实工作区隔离:所有
rw_*文件路径均被限制在所选工作区根目录内。系统会拒绝../、根目录外的绝对路径以及符号链接转义。 - SSH 主机密钥验证:默认使用
~/.ssh/known_hosts验证。支持accept-new(首次见密钥记录)、strict(严格模式)和off(关闭)策略。更改的主机密钥会被拒绝,不会静默接受。 - 结构化错误:连接被拒、认证失败、超时、路径不存在、权限被拒、工作区外访问及主机密钥问题均返回独立错误代码,便于智能体正确处理。
- 连接自愈:使用 ssh2 连接池心跳(15s × 3)检测断开连接,通道打开超时默认为 10s。遇到死连接的操作会自动重试一次,对智能体透明。
- 占位符而非副本:DSH 注册的本地目录是空的占位符(
.dsh-rw-meta.json记录来源)。不保存远程文件内容,因此不存在同步冲突。 - Shim 模式(默认开启):DSH 的原生工具(
read,write,edit,bash等)会被拦截并翻译为远程执行。智能体无需学习rw_*工具即可像操作本地一样操作远程。路径映射在占位符和远程之间双向进行。设置shim: false可禁用此模式。 - 显式失败策略:如果占位符对应的主机被移除,调用该占位符的操作会报错(
NOT_CONNECTED),而不是静默运行在空本地目录上。
安装¶
通过 DSH Market 安装插件:
dsh plugin --profile web add github:MDR-EX1000/dsh-rw
该仓库跟踪编译后的 lib/ 输出,因此安装此源码不需要本地 TypeScript 工具链或构建权限。如果需要精确的发布包:
dsh plugin --profile web add https://github.com/MDR-EX1000/dsh-rw/releases/latest/download/dsh-rw.tgz
维护说明:由于插件没有 prepare 等生命周期钩子,运行时入口点为提交的 lib/index.js。如果修改源码,需手动运行 pnpm build 并将生成的 lib/ 提交到 Git。插件依赖的 ssh2 可能会请求 pnpm 对可选原生模块的权限。
典型用法¶
- 选择工作区:在侧边栏或对话中选择“添加工作区” -> “REMOTE”卡片。从
~/.ssh/config选择主机(或添加密码认证主机),浏览或输入远程路径(默认从~/开始),输入工作区名称后使用。 - 常规协作:在 Shim 模式(默认)下,直接告诉智能体修复 bug、运行测试或重构代码。智能体会自动使用原生工具执行远程操作。
- 显式远程操作:使用
rw_*工具进行特定操作:- 文件操作:
rw_list_dir,rw_read_file,rw_write_file,rw_mkdir,rw_move,rw_delete - 命令执行:
rw_exec(以工作区根目录为 CWD) - 会话管理:
rw_hosts,rw_connect,rw_disconnect
- 文件操作:
注意事项¶
- Shim 模式:默认开启。如需禁用,可在配置文件中设置
shim: false。 - 权限要求:
ssh2依赖要求对可选原生模块的权限,使用 pnpm 的构建脚本白名单需包含此依赖。 - Git 仓库:保持
lib/文件夹在 Git 中,以便在src/变更后重新构建。 - 密钥验证:SSH 密钥验证基于
~/.ssh/known_hosts。
总结¶
dsh-rw 将 SSH 运维工具箱的理念引入 DSH 代理工作区,提供了接近 VS Code Remote-SSH 的体验。它通过持久连接和自动工具拦截,让远程开发环境对智能体而言与本地无异。