dshplugin.devDeepSeek Harness Plugins
deepseek-harness-portable plugin logo
DeepSeek Harness Plugin

deepseek-harness-portable

0
Published by yuluyangguang1

Portable build + Tauri desktop wrapper for DeepSeek Harness (dsh)

Developer Tools

Get this plugin

Review the source, then continue to the publisher.

dsh plugin add deepseek-harness-portable@latest
Get this plugin
Share on X ↗

About this plugin

Source snapshot 8/13/2026

yu.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.6
    • bin{"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 后端)按操作系统选择不同机制:

平台隔离后端是否需要额外原生二进制
LinuxLandlock(landlock-run C 二进制)/ Bubblewrap需要 node-addon-landlock-run(仅 linux-x64/arm64)
macOSSeatbelt(sandbox-exec,系统自带)不需要
WindowsWindows 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.jsonbundle.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_HOMEdata/)里初始化 profiles 并软链/回退拷贝 模块,属正常一次性行为。


六、已实测验证的事实(本机 Windows / Node 22.22.2)

  1. npm install @deepseek-ai/dsh@0.1.0-rc.6 成功(530 个包)。
  2. node node_modules/@deepseek-ai/dsh/lib/bin.js --help 输出真实 dsh CLI, 含 web 子命令。
  3. ✅ Linux 专用包 @deepseek-ai/node-addon-landlock-run-linux-arm64 被 npm 自动跳过/清理(印证跨平台可选依赖设计)。
  4. ✅ 上游 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