
deepseek-harness-portable
☆ 0Portable build + Tauri desktop wrapper for DeepSeek Harness (dsh)
Get this plugin
Review the source, then continue to the publisher.
dsh plugin add deepseek-harness-portable@latestAbout this plugin
Source snapshot 8/13/2026yu.ai — DeepSeek Harness 便携版 + 桌面封装(deepseek-harness-portable)
把 DeepSeek 官方刚开源的 AI Agent Harness —— dsh —— 做成
免安装便携版 和 桌面 App,品牌名 yu.ai。
- 上游仓库:https://github.com/deepseek-ai/deepseek-harness(MIT,今日刚发布)
- 上游包:
@deepseek-ai/dsh(npm,0.1.0-rc.6,开发者预览版) - 品牌 / 图标:本项目以
yu.ai为名,所有 App 图标均从assets/yu.ai.svg自动生成
一、可行性结论
可行。 已在本机(Windows / Node 22.22.2)实测验证:
npm install @deepseek-ai/dsh能正常安装、CLI 可运行、且 Linux 专用的原生沙箱二进制被正确跳过。 封装成"便携版"和"桌面 App"两条路线都已给出可构建、可复现的方案。
| 目标 | 可行性 | 方案 |
|---|---|---|
| 免安装便携版(U 盘/任意目录运行) | ✅ 高 | 内置便携 Node + 已安装的 dsh 包 + 启动脚本 |
| 桌面 App(窗口化封装) | ✅ 高 | Tauri 外壳,启动内置 dsh web 并嵌入 WebView |
| Windows 原生沙箱(命令隔离) | ✅ 部分 | 使用内置 Windows ACL 受限令牌后端(enforcement: partial) |
| 跨平台(Win/Linux/macOS) | ✅ 是 | dsh 本身即跨平台,沙箱按 OS 自动选择后端 |
二、上游 dsh 关键信息(已核实)
- 形态:一切都由插件(Cordis 框架)组成的 AI Agent Harness;通过 Web UI 或 headless 运行。
- 主要入口:
npx @deepseek-ai/dsh web→ 启动 Web UI(默认http://127.0.0.1:3080)。 - 已发布 npm 包:
@deepseek-ai/dsh@0.1.0-rc.6bin:{"dsh": "lib/bin.js"}(已构建好的 ESM 入口,可直接node lib/bin.js运行)- 无
os/cpu限制 → 在任意平台都能npm install - 不硬依赖 Linux 专用二进制:Landlock 沙箱是内部
optionalDependencies,非 Linux 会被 npm 自动跳过
- Node 引擎要求:
^22.19.0 || >=24.0.0(我们内置 Node 22.19.0) - 许可证:MIT(与上游一致,可再分发)
沙箱 / 命令隔离的跨平台真相(本项目最关键的一点)
dsh 的命令沙箱(ctx.sandbox 后端)按操作系统选择不同机制:
| 平台 | 隔离后端 | 是否需要额外原生二进制 |
|---|---|---|
| Linux | Landlock(landlock-run C 二进制)/ Bubblewrap | 需要 node-addon-landlock-run(仅 linux-x64/arm64) |
| macOS | Seatbelt(sandbox-exec,系统自带) | 不需要 |
| Windows | Windows ACL 受限令牌(sandbox-windows-acl,基于 koffi FFI) | 不需要单独的原生二进制,koffi 自带预编译 |
结论:Landlock 的 C 二进制只是 Linux 上的一个后端选项,并非 Windows 封装的障碍。
Windows 上 dsh 会自动切换到内置的 ACL 受限令牌后端(报告为 partial 隔离,
因为受限令牌必须保留 Everyone 等以保持进程初始化)。这与上游 support-matrix.md
"win32: 需要另一种机制的独立仓库" 的描述不冲突——因为 dsh 本身已经内置了
Windows ACL 后端,无需我们自己重写。
三、本仓库提供的两种封装
路线 A:便携版(Primary,推荐先跑这个)
一个自包含文件夹,里面打包了:
dsh-portable-<platform>/
├── runtime/ # 内置便携 Node.js(node.exe / node)
├── app/ # 已安装的 @deepseek-ai/dsh 及其 530 个依赖
├── data/ # DSH_HOME:配置/会话/插件(随文件夹走,U 盘友好)
├── dsh.bat # Windows 启动器(双击即用)
├── dsh.ps1 # Windows PowerShell 启动器(参数处理更稳健)
└── dsh.sh # Linux / macOS 启动器
特点:免安装、无需管理员权限、可放 U 盘、配置与历史随文件夹迁移。
路线 B:桌面 App(Tauri 封装)
src-tauri/ 是 Tauri v2 外壳:启动内置的 dsh web 服务(来自便携文件夹),
待 127.0.0.1:3080 就绪后把原生窗口导航到该地址。提供系统窗口、托盘、
以及各平台的安装包(Windows NSIS / macOS .app / Linux .deb/.AppImage)。
- 体积小(系统 WebView,约 10–20MB 外壳 + 便携文件夹资源)
- 构建需要 Rust 工具链;最终用户只拿到一个安装包
- 通过
tauri.conf.json的bundle.resources把整个便携文件夹打包进 App
四、目录结构
deepseek-harness-portable/
├── LICENSE # MIT
├── README.md # 本文
├── package.json # 仓库脚本(build:portable / tauri:build …)
├── portable/ # 启动器模板(构建时拷贝进产物)
│ ├── dsh.bat dsh.ps1 dsh.sh README.txt
├── scripts/
│ ├── build-portable.mjs # 下载 Node + 安装 dsh,组装便携文件夹/压缩包
│ └── verify-portable.mjs # 冒烟测试:确认 node + dsh --help 可用
├── src-tauri/ # Tauri 桌面封装(产品名 yu.ai)
│ ├── Cargo.toml build.rs tauri.conf.json capabilities/default.json
│ ├── src/main.rs # 启动内置 dsh 服务并导航 WebView
│ ├── loading/index.html # 启动闪屏
│ └── icons/ # 从 assets/yu.ai.svg 自动生成(32/128/128@2x + .ico + .icns)
└── .github/workflows/release.yml# 三平台便携版 + 三平台 App 的 CI 发布
五、快速开始
1)构建便携版
npm install # 安装本仓库的开发依赖(@tauri-apps/cli)
node scripts/build-portable.mjs # 当前系统 → dist-portable/dsh-portable-<os>.tar.gz
node scripts/build-portable.mjs --platform win64 # 指定 Windows
node scripts/build-portable.mjs --platform linux64 # 指定 Linux
node scripts/build-portable.mjs --platform macos # 指定 macOS(arm64)
校验产物(不启动服务,只验证 node + dsh CLI 可用):
node scripts/verify-portable.mjs
解压后运行:
# Windows
dist-portable\dsh-portable-win64\dsh.bat
# Linux / macOS
./dist-portable/dsh-portable-linux64/dsh.sh
Web UI 自动打开在 http://127.0.0.1:3080。
2)构建桌面 App(需先装 Rust)
# (可选) 从 assets/yu.ai.svg 重新生成全套图标(需先 npm i -D sharp)
node scripts/gen-icons.mjs
# 把便携文件夹准备进 src-tauri/dsh-portable,然后打包
npm run stage:tauri
npm run tauri:build
# 产物在 src-tauri/target/release/bundle/
首次运行
dsh web会在DSH_HOME(data/)里初始化 profiles 并软链/回退拷贝 模块,属正常一次性行为。
六、已实测验证的事实(本机 Windows / Node 22.22.2)
- ✅
npm install @deepseek-ai/dsh@0.1.0-rc.6成功(530 个包)。 - ✅
node node_modules/@deepseek-ai/dsh/lib/bin.js --help输出真实dshCLI, 含web子命令。 - ✅ Linux 专用包
@deepseek-ai/node-addon-landlock-run-linux-arm64被 npm 自动跳过/清理(印证跨平台可选依赖设计)。 - ✅ 上游
support-matrix.md/sandbox-windows-acl文档确认 Windows 走 内置 ACL 受限令牌后端,无需单独原生二进制。
注:在本沙箱环境内尝试完整启动
dsh web服务时,被本机 CLI 的"安全删除/回收站" 拦截钩子(非dsh缺陷)中断;在标准 Windows 上无此钩子,dsh web可正常启动。 安装、CLI 入口、跨平台依赖解析均已实测通过。
七、风险与注意事项
- 开发者预览 / 破坏性变更:
dsh明确声明会有不兼容更新。build-portable.mjs默认锁定0.1.0-rc.6,升级时显式指定--dsh-version。 - 体积:完整依赖约 530 个包,便携文件夹可能 100–300MB;CI 安装约 8 分钟。
- Windows 沙箱为 partial:受限令牌隔离强于"完全不隔离",但 Everyone 与 NTFS 硬链接边界仍可能被写;敏感场景请谨慎。
- 自动更新:本仓库未内置更新器。可后续为 Tauri 接入
tauri-plugin-updater或 CI 发布时人工升级版本号。 - 品牌:本项目以
yu.ai为名(图标来源assets/yu.ai.svg)。MIT 与 DeepSeek 上游代码层面允许复用与再分发,但请遵守 DeepSeek 的商标指引。
八、发布到你自己的 GitHub(yuluyangguang1)
本仓库脚手架已就绪(在 deepseek-harness-portable/)。推送步骤:
cd deepseek-harness-portable
git init
git add -A
git commit -m "feat: portable build + Tauri app wrapper for DeepSeek Harness"
# 方式一:用 gh(需先 gh auth login)
gh auth login
gh repo create yuluyangguang1/deepseek-harness-portable --public --source=. --remote=origin
git branch -M main
git push -u origin main
# 方式二:在 github.com 手动新建空仓库后
git remote add origin https://github.com/yuluyangguang1/deepseek-harness-portable.git
git branch -M main
git push -u origin main
推送后给仓库打 tag(v0.1.0)即可触发 .github/workflows/release.yml:
自动构建三平台的便携压缩包与桌面安装包,并附到 GitHub Release。
九、许可证
本封装仓库与上游一致采用 MIT。上游 @deepseek-ai/dsh-* 各包版权归
DeepSeek AI,详情见上游 THIRD_PARTY_NOTICES.md。