dsh-wsl-sidebar:在 DSH 里用 WSL 跑 Linux 侧智能体

前言

在 Windows 上给 DeepSeek Harness(DSH)配 WSL 工作区时,常见做法是直接通过 \\wsl.localhost 读写文件。资料里说明,这条路径是 9p 共享,不是 Windows 原生文件系统:从 UNC 路径写入会失败(只读沙箱下尤为确定);工作区在被打标签前 ACL 会被改写,而 9p 共享没有安全描述符,Get-Acl 会抛错,Windows 侧 shell 甚至无法在 \\wsl.localhost\ 工作区里启动。另外,单个 Windows 进程一次只能代表一个发行版,指向另一个发行版里的文件时,路径可能解析到第一个发行版。

下面介绍社区插件 dsh-wsl-sidebar(维护者 Wang1462604987,npm 包名 dsh-wsl-sidebar,当前 package 版本 1.7.2,MIT 许可证)。它不依赖在 Windows 侧经 UNC 写文件,而是通过 wsl.exe 在指定 Linux 发行版内执行命令,让智能体的读、写、编辑、搜索都在 Linux 侧完成。

这是什么

dsh-wsl-sidebar 是 DSH 的 客户端 类插件:在 Harness 里提供 WSL 设置页、新建会话时的 WSL 目录入口,以及六个以 wslx- 为前缀的工具,供智能体在 WSL 发行版内跑原生 Linux 命令、后台任务和交互式 shell。

插件由主机端(index.js、lib/*.js)与客户端(client.js)组成,经 Harness Web 服务在 /__wsl_plugin__/ 下注册路由;非当前 Web 会话的请求会被拒绝。社区目录页:https://www.skillhub.cn/plugins/Wang1462604987/dsh-wsl-sidebar;源码与说明:https://github.com/Wang1462604987/dsh-wsl-sidebar。

设计原则与发行版解析

资料中的设计规则是:智能体从不经 \\wsl.localhost 写文件。每次读、写、编辑、搜索都变成一次 wsl.exe -d <distro> -e bash -lc <script>,工作在 Linux 侧以普通 Linux 命令完成。

发行版按以下顺序解析:

  1. 工具参数里显式传入的 distro(会与 wsl -l -q 校验,名称错误会列出已安装项);
  2. 当前会话工作区所在发行版(从 \\wsl.localhost\<distro>\... 路径读取);
  3. 环境变量 DSH_WSL_DISTRO(适合工作区仍是 Windows 路径时);
  4. 否则使用 wsl.exe 默认发行版;各工具会打印实际运行的发行版,避免静默误用。

工作目录会映射到 Linux 路径:/home/... 保持不变,C:\Users\... 变为 /mnt/c/Users/...,UNC 路径映射为对应 Linux 形式。

核心功能

Settings → WSL 三页签

页签 作用
Distros 各发行版状态与 WSL 版本,支持启动、停止、设默认、在 WSL 1/2 间切换
Config 全局 .wslconfig 与各发行版 /etc/wsl.conf:内存、处理器数、swap、网络模式、localhost 转发、systemd、默认用户等表单编辑,并附带原文视图
Runtime 选定发行版的内存与磁盘、负载、 uptime、监听端口与进程数(来自 free -b、df -B1、ss、/proc 等)

保存行为在资料中有明确说明:输入时不写盘,仅在保存时写入;.wslconfig 用临时文件加原子重命名,/etc/wsl.conf 经 wsl.exe -u root 写入;保存不会自动重启 WSL,页面提供重启按钮,wsl --shutdown 会先确认(会停止所有发行版)。每次写入会保留备份(.wslconfig.bak-<date>、/etc/wsl.conf.bak-<date>)。停止发行版、切换版本、导出磁盘、wsl --shutdown 等在默认权限不是 danger-full-access 时需要确认(acknowledge)。已停止的发行版不会为读配置而隐式启动,目录浏览同样返回 distro-stopped。

新建会话入口

在新建会话页与其他入口并列有 WSL 目录 按钮:选择发行版与目录后,会创建 \\wsl.localhost\<distro>\<path> 工作区并切换草稿会话,行为与内置 Windows 目录选择器一致。

六个 wslx-* 工具

工具 作用
wslx-run 在发行版内执行 bash 命令(如 rg、git、make、python3);可选 workdir、timeoutMs;危险命令会被拦截
wslx-read 带行号读文件,每次最多 2000 行
wslx-write 经 Linux 侧 stdin 管道写整文件
wslx-edit 精确替换一处字符串,不改变文件 mode 与 owner
wslx-search 用 rg 正则搜索,失败时回退 grep -E;最多 250 条匹配
wslx-bg 跨调用保持进程:start(命令或 mode=shell 交互 bash -i)、output(按 cursor 增量)、input(一行 stdin)、kill、list

各工具均支持 asRoot: true,通过 wsl.exe -u root 在该发行版内以 root 执行单次调用,Windows 进程本身无需提权。工具名带 wslx- 前缀,避免与其他插件 bundle 重名。

wslx-bg 每个任务对应一个 wsl.exe 子进程;输出上限 1 MiB,默认 TTL 30 分钟,随 Harness 进程退出而结束,不留下守护进程。无伪终端,因此 vim、top、htop 等全屏程序无法使用;按行读写 stdin/stdout 的交互(如 python3 -i、psql、ssh)可用。

安装与启用

包为原生 ESM,无需构建步骤。官方 README 给出两种方式:

从 GitHub 安装:

dsh plugin add github:Wang1462604987/dsh-wsl-sidebar

从 npm 安装:

dsh plugin add dsh-wsl-sidebar

安装后需要重启 Harness:客户端在启动时打包加载,仅热重载不够(README 原文如此说明,截断处亦强调需 restart)。

典型用法思路

  1. 安装并重启 DSH 后,在 Settings → WSL 查看发行版、按需改 .wslconfig / wsl.conf,在 Runtime 页查看资源与端口。
  2. 新建会话时用 WSL 目录 把工作区设为 \\wsl.localhost\<distro>\<path>,让会话与发行版一致。
  3. 智能体在 WSL 工作区或 Windows 工作区(配合 DSH_WSL_DISTRO)下调用 wslx-run 跑构建与脚本,wslx-read / wslx-write / wslx-edit / wslx-search 处理 Linux 侧文件,wslx-bg 跑长时间或交互命令。

具体参数以插件注册的工具 schema 与 README 为准;上文表格仅概括能力边界。

适用场景与注意

适合:在 Windows 上跑 DSH、代码与工具链在 WSL 内、希望智能体用 Linux 命令而非经 UNC 写 WSL 文件树的开发者。

注意:

  • 插件以当前 DSH 进程权限运行,并通过已认证的 Web 会话调用主机路由;安装前请自行查看 GitHub 源码与 MIT 许可证,确认符合你的安全策略。
  • 社区目录 skillhub.cn 为独立站点,与 DeepSeek / 幻方无官方从属关系;DSH 生态理念是「一切皆插件」,本文介绍的是社区维护的客户端插件之一。
  • 依赖本机已安装 WSL 与 wsl.exe;错误发行版名、已停止发行版、沙箱与确认门控等行为均以 README 描述为准,勿假设与通用 Shell 工具完全相同。

结尾

dsh-wsl-sidebar 把 WSL 管理、Linux 工作区选择与 wslx-* 工具收进 DSH,绕开 \\wsl.localhost 写入与单进程多发行版解析问题,让智能体在指定发行版里用普通 Linux 命令干活。

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

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

小夜