# dsh-wsl-workspace [![dsh.so security](https://www.dsh.so/badge/dsh-wsl-workspace.svg)](https://www.dsh.so/artifact/dsh-wsl-workspace) [![dsh.so install](https://www.dsh.so/badge/install/dsh-wsl-workspace.svg)](https://www.dsh.so/artifact/dsh-wsl-workspace) [English](README.md) · [中文](README.zh.md) · [日本語](README.ja.md) · [한국어](README.ko.md) · [Français](README.fr.md) · [Deutsch](README.de.md) · [Español](README.es.md) · [Português](README.pt.md) · [Русский](README.ru.md) ![alt text](image-3.png) 在 DeepSeek Harness Web GUI 中「添加 WSL 工作区」:让 agent 会话的 bash 命令与文件读写都运行在本机 WSL 发行版里,路径均为 Linux 形式,WSL 内无需安装任何工具链。会话可同时访问 WSL 与 Windows 两个系统——bash 命令在 WSL 发行版内执行,Windows 文件随时可通过 `/mnt/`(如 `/mnt/c/Users/...`)访问。 ## 安装 三种方式任选其一,然后重启 `dsh web`: ```powershell # 1) npm 包 dsh plugin --profile web add dsh-wsl-workspace # 2) GitHub 仓库(仓库内已含预构建 lib/,无需本地构建) dsh plugin --profile web add https://github.com/6Mikao9/dsh-wsl-workspace # 3) 本地目录(开发/自用) dsh plugin --profile web add D:\path\to\dsh-wsl-workspace ``` 重启 `dsh web` 后,侧栏底部 Settings 旁出现 W 按钮。 ## 使用 点侧栏底部 Settings 旁的 W 按钮,打开「添加 WSL 工作区」对话框。先从下拉框选择一个发行版,再浏览目录树或直接输入 Linux 绝对路径(如 `/home/me/proj`),可以点「检查」确认路径存在。对话框文案跟随 DSH 界面语言。用户名是可选项:留空则以该发行版的默认用户运行,填写该发行版里的某个 Linux 用户名则以该用户运行(等价于 `wsl.exe -u <用户名>`)。用户名只影响 bash 命令的运行身份,文件工具通过 Windows 侧的 WSL 共享访问、不受其影响;每个工作区填写的用户名保存在 `/wsl-workspaces.json`,删除对应条目(或重开对话框重建工作区)即可恢复默认用户。 点「创建并打开」后,新会话随即运行在 WSL:`bash` 工具在所选发行版内执行命令,`read`/`write`/`edit` 读写 WSL 文件,模型看到的所有路径都是 Linux 形式。模式选择器照常可用——标准、PTC、极简、创造都会自动落到对应的 WSL 变体(选择器里的 WSL 变体条目为中英双语,如 `WSL · Standard mode(标准模式)`);会话内仍可通过 `/mnt/`(如 `/mnt/c/Users/...`)访问 Windows 文件。对话框右上角的「?」按钮会展开一页说明:这份构建声明兼容的 DSH 版本、插件的用法与特性,以及它无法绕过的已知限制。 ![alt text](image-2.png) ## 行为与权限说明 - **bash 工具**:以配置的用户名在 WSL 发行版内运行(留空 = 发行版默认用户,通常为 root),可对发行版内任意路径读写。Windows 的 ACL 沙箱无法包裹 `wsl.exe`(子进程运行在 Linux 内核侧),WSL 自身即隔离边界,DSH 文件策略不作用于 bash。 - **文件工具(read/write/edit)**:经 Windows 侧的 WSL 9P 共享访问,受 DSH 文件策略约束。`workspace-write` 下读可到任意位置、写仅限会话工作区;改为 `danger-full-access` 后工作区外也可写入。用户名设置不影响文件工具。 - **技能目录(skill catalog)**:从会话 cwd 最近的 `.git` 祖先开始(没有 `.git` 祖先则用 cwd 本身)向下扫描 `.dsh/skills` 与 `.agents/skills`(含嵌套项目),上限为 4 层目录、64 个技能目录、4096 个已访问目录;结果按扫描根缓存 10 秒,技能正文始终实时读取。两个底层限制都不是本插件能修的:一是 Windows 侧的 `\\wsl.localhost` 共享**无法解析 Linux 符号链接**(用 `ln -s` 链进来的项目发现不了,扫描会跳过而不报错,请把工作区注册在真实项目目录所在的层级);二是 **UNC 工作区下模型收不到技能目录**——宿主技能提供者用 `fs.watch` 监视该共享,对 `\\wsl.localhost\...` 会抛 `EISDIR`,该次观测被判为不完整,而 `dsh-tool-skill` 在快照不完整时会丢弃整条目录消息。技能本身仍可按名加载(`skill {name: "..."}`),同一实例上 Windows 工作区的会话能正常收到目录。 - `wsl.exe` 在发行版尚未启动时向 stderr 打印的 localhost 端口转发提示(乱码但无害)可忽略。 ## 许可与出处 MIT,详见 [LICENSE](LICENSE) 与 [NOTICE](NOTICE),NOTICE 精确列明: - **改编/继承源码**:DeepSeek Harness(MIT)的 `dsh-bash-local`(执行器机制)、`dsh-fs-local`(`WslFileSystem` 子类化)、shipped agent presets(变体生成读取/变换); - **设计参考(未复制源码)**:[dsh-bash-terminal](https://github.com/MAXeaglet/dsh-bash-terminal)(MIT,wsl argv/WSLENV 思路)、[dsh-side-panel](https://github.com/ccq1/dsh-side-panel)(BSD-3-Clause,Host 路由模式)、[vpshub](https://github.com/Sdongmaker/vpshub)(MIT,路线图参考)。 发布/再分发时请保留 LICENSE 与 NOTICE。 ## 致谢 特别感谢 [dsh-deep-whale](https://github.com/Small-tailqwq/dsh-deep-whale)(DSH Web 鲸鱼娘皮肤系列 · 深海女仆工坊 maid-atelier,CC BY-NC-SA 4.0):鲸鱼娘皮肤插件为 DeepSeek Harness Web 界面带来了一整套可爱的皮肤,让 DSH 的日常使用更有温度。