前言¶
在 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 等固定名单,不是内核级隔离。
典型用法思路¶
- Windows 主会话 + 偶发 Linux 命令:继续用 Windows 的
bash/ 文件工具,需要时在同一会话里调用wsl_bash、wsl_read等,路径用 Linux 形式或先用wsl_path转换。 - 整段对话在 Linux 工作区:新建会话选 WSL,在
$HOME下选项目目录,之后grep、glob、read/write的相对路径都相对该工作区。 - 长任务:
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 仓库。