dsh-wsl-bridge:在 DSH 桌面端接入原生 WSL 执行面

前言

在 Windows 上用 DeepSeek Harness(DSH)做开发时,常见做法是继续在 PowerShell 或 cmd 里跑命令、用 Windows 路径读写文件。项目实际在 WSL 发行版里构建、测试时,就要在宿主和 Linux 之间来回切换路径,或在 WSL 里再装一套 DSH。下面介绍的 dsh-wsl-bridge 由社区维护者 TGWgulugu 发布,目标是在不额外起 web 服务、也不在发行版内安装 DSH 的前提下,让 Windows 会话与 WSL 会话共用同一套 DSH 桌面端,并可选「整会话走 Linux 工具流」。

这是什么

dsh-wsl-bridge 是 DSH 的客户端类插件(npm 包名 dsh-wsl-bridge,当前版本 0.4.7)。它通过 wsl.exe 把 bash、读写在 Linux 路径上的文件操作、以及 GNU grep / find 接到 DSH 工具层;同时提供新建会话时的 WSL 模式,由你在当前发行版里选定工作区目录。插件已收录 dsh-market,在插件市场搜 dsh-wsl-bridge 即可(市场分类为 WSL)。社区目录页:SkillHub - dsh-wsl-bridge。源码与说明:GitHub - TGWgulugu/dsh-wsl-bridge。许可证为 MIT。

环境要求:Windows、一个可用的 WSL 发行版,以及 DSH >= 0.2.1-rc.2。

核心功能

插件提供两条互补的用法,README 里写得很清楚。

任意会话里的 wsl_* 工具

这些工具挂在现有会话上,不替换 Windows 自带的 shell 和文件工具。

工具 作用
wsl_bash 在 WSL 里执行 bash;每个会话一个持久 shell,cd 和 export 会保留;输出以 [exit code: N] 结尾
wsl_read 读 Linux 路径,支持按行 offset / limit
wsl_write 原子写入 Linux 路径;可带 expectedSha256,读过之后文件被改过则拒绝写入
wsl_edit 按字符串替换;读和写之间用 sha256 核对内容
wsl_path Windows 路径与 Linux 路径互转,优先用发行版里的 wslpath
wsl_env 查看发行版、内核、用户以及是否有 node / python3 / git

默认会有一段路由提示:Linux 侧工作优先用 wsl_bash 和 Linux 路径,Windows 文件在 /mnt/<盘符>。宿主工具不会被隐藏或禁用。

wsl_bash 可传 runInBackground: true,命令登记为宿主后台任务,用 job_output 看输出、job_kill 停止;该任务独占一个 WSL 进程,不继承持久 shell 的 cd / export,会话 shell 退出也不会杀掉它。

WSL 会话模式

新建会话时选择 WSL。此模式下 bash、read、write、edit、grep、glob 均在 Linux 里执行,参数为 Linux 路径;persona、skill、goal、plan、compaction、subagent、todo、web、present 仍走 DSH 标准会话能力。

工作区由你在当前发行版里选定:选中 WSL 后,窗口从 $HOME 列出该发行版的文件夹,可用「使用此文件夹」确认;目录经本机 wslpath -w 解析,不写死发行版名或用户名。右上角文件夹按钮打开该目录,而不是 DSH 自带的 default-workspace。对话发出第一条消息后不能再更换模式。

第一次 bash、相对路径,以及不传 path 的 grep / glob,都从所选工作区开始。搜 Windows 目录需显式传入 /mnt/<盘符>/...。上面的 wsl_* 工具不走该选择窗口,仍使用当前 Windows 会话目录。

安装与启用

在 DSH 插件市场(dsh-market)搜索 dsh-wsl-bridge 安装,或在普通终端执行(不要在 DSH 会话的工具沙箱里跑;dsh 不在 PATH 时用 Desktop 自带的 dsh.cmd 完整路径):

dsh plugin --profile desktop add dsh-wsl-bridge

装完后从托盘完全退出 DSH Desktop 再打开;仅刷新页面不够。重启后,任意会话应出现 wsl_bash、wsl_read、wsl_write、wsl_edit、wsl_path、wsl_env;新建会话的模式选择器里出现 WSL。

卸载:

dsh plugin --profile desktop remove dsh-wsl-bridge

若卸载后应用起不来,在该 profile 目录执行一次 pnpm install。

配置要点

在插件行的 config(cordis.patch.yml 或 profile 覆盖补丁)中可改下列字段,均可省略:

字段 默认 说明
distro '' 发行版名;空表示系统默认
timeoutMs 120000 bash / wsl_bash 默认时限(毫秒)
fileTimeoutMs 30000 读、写、搜索单次时限
maxFileBytes 2097152 read / edit 最多读取字节数
defaultWorkdir session 宿主 wsl_* 的 session 为当前 Windows 会话目录;WSL 模式的 session 为所选工作区;home 为发行版 $HOME
dangerGuard true 拒绝明显破坏性命令,除非该次带 allowDangerous: true
backgroundJobs true 是否允许 runInBackground
promptSection true 是否在宿主会话加入路由提示
selfCheck false 挂载时探测 WSL;也可设环境变量 DSH_WSL_BRIDGE_SELFCHECK=1

破坏性命令守卫覆盖递归删除、写块设备、关机、find -delete、git clean -fdx 等固定名单,不是内核级隔离。

典型用法思路

  1. Windows 主会话 + 偶发 Linux 命令:继续用 Windows 的 bash / 文件工具,需要时在同一会话里调用 wsl_bash、wsl_read 等,路径用 Linux 形式或先用 wsl_path 转换。
  2. 整段对话在 Linux 工作区:新建会话选 WSL,在 $HOME 下选项目目录,之后 grep、glob、read/write 的相对路径都相对该工作区。
  3. 长任务:wsl_bash 配合 runInBackground: true,用 DSH 宿主侧的 job_output / job_kill 管理。

适用场景与注意

适合:在 Windows 上跑 DSH Desktop、日常开发落在 WSL 发行版、希望 agent 直接跑 bash 与 GNU 工具链、又不想在 WSL 里再装 DSH 的用户。

务必知晓:

  • 仅支持 Windows;非 Windows 上相关配置会禁用。
  • 工具经 wsl.exe 执行,不受 DSH 的 Windows 文件沙箱约束;发行版内该用户可写的路径,以及 /mnt/<盘符> 下的 Windows 路径,都可能被读写。细节见仓库 docs/SECURITY.md。
  • grep / glob 不读 .gitignore;会跳过隐藏文件、node_modules 和版本库元数据。
  • 首次调用可能等待发行版冷启动数秒;默认 timeoutMs 为 120 秒。
  • 插件不在发行版内安装 Node 或其他工具链。
  • DSH 生态是「一切皆插件」;SkillHub、dsh-market 等为社区目录,与 DeepSeek / 幻方无官方从属关系。安装前建议阅读源码与 MIT 许可证,确认符合你对权限与数据路径的要求。

装完工具不出现、权限 EPERM、模式缺失等问题,可查 docs/TROUBLESHOOTING.md。

结尾

dsh-wsl-bridge 把 WSL 当成 DSH 在 Windows 上的原生执行面:既可给现有会话加 wsl_* 工具,也可开专用 WSL 会话并在发行版里选工作区,且无需在 Linux 里再部署 DSH。进一步了解可打开 SkillHub 目录页 与 GitHub 仓库。

羽毛球分组比赛记分
小程序二维码

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

Xiaoye