WSL for DSH
在 Windows + WSL2 上运行 DeepSeek Harness(DSH)的两个可复用技能(skill):
wsl— 日常在 WSL 里执行 Linux 命令、转换 Windows↔WSL 路径、双向拷贝文件、托管 HTTP 服务器、管理 WSL 内 DSH。dsh-wsl-install— 从零在 WSL 中安装并运行 DSH 的完整流程(含所有已踩过的坑与自动化脚本)。
两个技能来自一次完整的实战部署(Windows 侧 DSH 3080 + WSL 内 DSH 3081 并存),经验全部实测验证。
快速开始
方式一:把整个仓库当作 DSH 技能根
DSH 的技能发现规则:扫描 <root>/<name>/SKILL.md 或 <root>/<name>.md。把本仓库 clone 或复制到 $DSH_HOME/skills/(默认 ~/.dsh/skills/)下即可:
# Windows PowerShell
git clone https://github.com/<you>/WSL-for-DSH.git "$env:USERPROFILE\.dsh\skills\repo-WSL-for-DSH"
# 或直接复制两个技能目录
Copy-Item .\skills\* "$env:USERPROFILE\.dsh\skills\" -Recurse
之后 DSH 技能目录会出现 wsl 与 dsh-wsl-install,模型可按需加载。
方式二:只复制单个技能
# 只要 wsl
Copy-Item .\skills\wsl "$env:USERPROFILE\.dsh\skills\" -Recurse
# 只要安装流程
Copy-Item .\skills\dsh-wsl-install "$env:USERPROFILE\.dsh\skills\" -Recurse
技能说明
wsl — 日常 WSL 调用
配套脚本:skills/wsl/scripts/wsl.ps1(PowerShell,处理 wsl.exe UTF-16 乱码、发行版选择、路径与拷贝)。
wsl.ps1 -List # 列出发行版
wsl.ps1 -Run '<bash 命令>' # 执行命令(默认 Ubuntu-24.04)
wsl.ps1 -Distro <名> -Run '...' # 指定发行版
wsl.ps1 -PathToWsl 'D:\path' # Windows → WSL 路径
wsl.ps1 -PathToWin '/mnt/d/path' # WSL → Windows 路径
wsl.ps1 -ToWsl 'D:\a' -To '/home/x/a' # Windows → WSL 拷贝(二进制安全)
wsl.ps1 -FromWsl '/home/x/a' -To 'D:\a' # WSL → Windows 拷贝
wsl.ps1 -Serve 8137 -ServeDir ~/site # WSL 内托管 HTTP(跨调用存活)
wsl.ps1 -StopServer 8137 # 停止 HTTP 服务器
wsl.ps1 -DshWeb 3081 # 启动 WSL 内 dsh web
wsl.ps1 -StopDshWeb # 停止 WSL 内 dsh web
权限要求:DSH 的
workspace-write沙箱会拦截wsl.exe与 WSLService 的命名管道 IPC(报E_ACCESSDENIED)。使用本技能需将会话权限切为danger-full-access。
dsh-wsl-install — 从零安装 DSH 到 WSL
配套脚本:skills/dsh-wsl-install/scripts/install-dsh-wsl.sh(bash,Node 24 + pnpm + DSH 一键安装)。
bash install-dsh-wsl.sh 完整安装(Node + pnpm + dsh + 指引)
bash install-dsh-wsl.sh --no-dsh 只装 Node/pnpm
bash install-dsh-wsl.sh --verify 端到端验证(headless LLM + 工具调用)
bash install-dsh-wsl.sh --help
覆盖内容:前置检查 → NodeSource Node 24 → pnpm(corepack)→ DSH 全局安装(含 --allow-scripts 原生模块)→ ~/.dsh 迁移/初始化(凭据 600)→ web profile 依赖与皮肤包特殊处理 → 端口冲突与后台运行 → Chrome PWA 皮肤跟随 → 工作区注册 → 常见错误速查。
仓库结构
WSL-for-DSH/
├── README.md
├── LICENSE
├── skills/
│ ├── wsl/ # 技能:日常 WSL 调用
│ │ ├── SKILL.md
│ │ └── scripts/wsl.ps1
│ └── dsh-wsl-install/ # 技能:DSH 安装流程
│ ├── SKILL.md
│ └── scripts/install-dsh-wsl.sh
└── scripts/ # 可选的独立脚本(直接使用,不依赖技能加载)
├── windows/ # 一键启动/停止/安装 PWA 的 .bat + 辅助 .ps1
└── wsl/ # 供 WSL 内使用的辅助脚本
scripts/windows/下的文件是「一键启动 DSH」(bat + PWA 检测)的参考实现,作为独立脚本随仓库发布;skills/里的 SKILL.md 会指引模型如何使用它们。
发布到 GitHub(供 DeepSeek 官方发现)
官方 deepseek-harness README 明确要求:
Add the
dsh-plugintopic to your plugin repository for discoverability.
因此发布本仓库时,请务必:
- 仓库名:GitHub 仓库名不含空格,用
WSL-for-DSH(本目录的显示名是「WSL for DSH」)。 - 添加 topic:在 GitHub 仓库页面 → 右侧 About → 齿轮图标 → Topics 中填入
dsh-plugin(官方可发现性要求)。 - 打版本 tag(建议,便于发布/回滚):
cd "F:\code\WSL for DSH"
git init
git add .
git commit -m "WSL for DSH: wsl + dsh-wsl-install skills"
git branch -M main
git remote add origin https://github.com/<you>/WSL-for-DSH.git
git push -u origin main
# 发布版本(tag)
git tag -a v1.0.0 -m "WSL for DSH skills v1.0.0"
git push origin v1.0.0
- 保持技能格式合法:
skills/<name>/SKILL.md的 frontmatter 必须含name(kebab-case)与description;当前两个技能均符合。
关键经验(都写进了 SKILL.md)
- WSL 需要
danger-full-access:沙箱拦截 wsl.exe↔WSLService IPC。 - DSH 后台进程跨调用存活:
setsid nohup ... & disown;WSL2 VM 内进程不受 Windows 进程树清理影响。 - 写 .bat 的硬规则:纯 ASCII + CRLF;if 块内 echo 不含
();用if not "%X%"=="";复杂 PowerShell 拆成 .ps1。 - Chrome PWA 皮肤:
--app=<url>不读meta theme-color(标题栏灰),真 PWA(--app-id)才跟随皮肤;无静默安装 flag。 - 凭据权限:
~/.dsh/.credentials.yaml必须chmod 600。 - 皮肤包特殊处理:
maid-atelier@0.1.1不在 npm registry;headless profile 也要皮肤包(装入共享profiles/node_modules)。
许可
MIT License — 见 LICENSE。
No comments yet. Be the first to write one.