DeepSeekHarness桌面端打包
55.4/100
综合分
111
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/17 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查未通过:仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add wess09/DeepSeekHarnessDesktop该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · desktop
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 81 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装仓库 package.json 标记 private,未发布到 npm,需从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包deepseek-harness-desktop @ 0.4.1
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/29 20:44:59
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 94 处,展示前 75 条)
- 读取本地文件app/main.js:50
if (fs.existsSync(p)) return p - 发起网络请求app/main.js:57
const req = http.get( - 读取本地文件app/main.js:86
if (!fs.existsSync(node)) { showError(`Node 运行时缺失:${node}`); return false } - 读取本地文件app/main.js:87
if (!fs.existsSync(path.join(cwd, 'apps', 'cli', 'src', 'bin.ts'))) { showError(`harness 目录不完整:${cwd}`); return false } - 写入本地文件app/main.js:90
fs.mkdirSync(path.dirname(logFile()), { recursive: true }) - 执行外部命令来自配置/变量app/main.js:98
child = spawn(node, ['--import', 'tsx/esm', 'apps/cli/src/bin.ts', 'web'], { - 执行外部命令固定命令app/main.js:125
spawnSync('taskkill', ['/pid', String(serverProcess.pid), '/T', '/F'], { windowsHide: true }) - 删除本地文件build/assemble.js:19
function rmrf(p) { fs.rmSync(p, { recursive: true, force: true }) } - 执行外部命令来自配置/变量build/assemble.js:23
const r = spawnSync(cmd, args, { stdio: 'inherit' }) - 写入本地文件build/assemble.js:29
fs.mkdirSync(dstDir, { recursive: true }) - 读取本地文件build/assemble.js:42
if (!fs.existsSync(path.join(electronDist, 'electron.exe'))) fail(`electron dist 不存在: ${electronDist}`) - 读取本地文件build/assemble.js:43
if (!fs.existsSync(path.join(proj, 'resources', 'node', 'node.exe'))) fail('node.exe 不存在: resources\\node') - 读取本地文件build/assemble.js:45
if (!fs.existsSync(path.join(electronDist, 'Electron.app'))) fail(`Electron.app 不存在: ${electronDist}`) - 读取本地文件build/assemble.js:47
if (!fs.existsSync(path.join(electronDist, 'electron'))) fail(`electron dist 不存在: ${electronDist}`) - 读取本地文件build/assemble.js:49
if (!fs.existsSync(path.join(proj, 'resources', 'harness', 'apps', 'cli', 'src', 'bin.ts'))) { - 写入本地文件build/assemble.js:54
fs.mkdirSync(out, { recursive: true }) - 写入本地文件build/assemble.js:63
fs.copyFileSync(path.join(electronDist, 'electron.exe'), path.join(out, 'DeepSeekHarness.exe')) - 写入本地文件build/assemble.js:75
fs.mkdirSync(staging, { recursive: true }) - 写入本地文件build/assemble.js:78
fs.renameSync(staging, appDir) - 写入本地文件build/assemble.js:79
fs.renameSync(path.join(macosDir, 'Electron'), path.join(macosDir, 'DeepSeekHarness')) - 读取本地文件build/assemble.js:86
if (!fs.existsSync(src1024)) fail(`缺少 ${src1024}(先运行 convert-icon.js)`) - 执行外部命令来自配置/变量build/build-harness.js:17
const r = spawnSync(cmd, args, { cwd, stdio: 'inherit', shell: process.platform === 'win32' }) - 读取本地文件build/build-harness.js:24
if (!fs.existsSync(path.join(h, 'package.json'))) { - 读取本地文件build/build-harness.js:30
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8')) - 写入本地文件build/build-harness.js:32
fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2)) - 写入本地文件build/build-harness.js:33
fs.writeFileSync(path.join(h, '.npmrc'), 'manage-package-manager-versions=false\nnode-linker=hoisted\n') - 删除本地文件build/build-harness.js:38
fs.rmSync(path.join(h, '.git'), { recursive: true, force: true }) - 读取本地文件build/convert-icon.js:13
return sharp(fs.readFileSync(SRC), { density: 300 }) - 写入本地文件build/convert-icon.js:26
fs.writeFileSync(OUT, ico) - 写入本地文件build/convert-icon.js:30
fs.writeFileSync(path.join(dir, 'icon-256.png'), pngs[6]) - 写入本地文件build/convert-icon.js:31
fs.writeFileSync(path.join(dir, 'icon-1024.png'), await renderPng(1024)) - 读取本地文件build/download-node.js:23
for (const e of fs.readdirSync(dir, { withFileTypes: true })) { - 写入本地文件build/download-node.js:34
fs.mkdirSync(destDir, { recursive: true }) - 写入本地文件build/download-node.js:36
fs.mkdirSync(tmp, { recursive: true }) - 发起网络请求build/download-node.js:40
const res = await fetch(url) - 写入本地文件build/download-node.js:42
fs.writeFileSync(archive, Buffer.from(await res.arrayBuffer())) - 执行外部命令固定命令build/download-node.js:45
const r = spawnSync('tar', ['-xf', archive, '-C', tmp], { stdio: 'inherit' }) - 写入本地文件build/download-node.js:52
fs.copyFileSync(bin, target) - 写入本地文件build/download-node.js:53
if (process.platform !== 'win32') fs.chmodSync(target, 0o755) - 删除本地文件build/download-node.js:55
fs.rmSync(tmp, { recursive: true, force: true }) - 写入本地文件build/materialize.js:15
function copyFile(src, dst) { fs.copyFileSync(src, dst) } - 写入本地文件build/materialize.js:19
fs.mkdirSync(dst, { recursive: true }) - 读取本地文件build/materialize.js:20
for (const e of fs.readdirSync(src, { withFileTypes: true })) { - 写入本地文件build/materialize.js:33
fs.mkdirSync(dst, { recursive: true }) - 读取本地文件build/materialize.js:34
for (const e of fs.readdirSync(src, { withFileTypes: true })) { - 写入本地文件build/materialize.js:48
fs.mkdirSync(dst, { recursive: true }) - 读取本地文件build/materialize.js:49
for (const e of fs.readdirSync(realTarget, { withFileTypes: true })) { - 读取本地文件build/materialize.js:69
for (const e of fs.readdirSync(dir, { withFileTypes: true })) { - 删除本地文件build/materialize.js:74
try { fs.unlinkSync(p) } catch {} - 删除本地文件build/materialize.js:78
fs.rmdirSync(p) - 删除本地文件build/materialize.js:81
fs.unlinkSync(p) - 读取本地文件build/materialize.js:99
for (const e of fs.readdirSync(d, { withFileTypes: true })) { - 写入本地文件build/materialize3.js:14
fs.mkdirSync(dst, { recursive: true }) - 读取本地文件build/materialize3.js:15
for (const e of fs.readdirSync(src, { withFileTypes: true })) { - 写入本地文件build/materialize3.js:22
st.isDirectory() ? copyDir(r, d, true) : fs.copyFileSync(r, d) - 写入本地文件build/materialize3.js:23
} else fs.copyFileSync(s, d) - 读取本地文件build/materialize3.js:29
for (const g of fs.readdirSync(path.join(H, 'packages'))) { - 读取本地文件build/materialize3.js:31
if (!fs.statSync(gd).isDirectory()) continue - 读取本地文件build/materialize3.js:32
for (const p of fs.readdirSync(gd)) { - 读取本地文件build/materialize3.js:34
if (fs.statSync(pd).isDirectory() && fs.existsSync(path.join(pd, 'package.json'))) pkgs.push(pd) - 读取本地文件build/materialize3.js:37
for (const v of fs.readdirSync(path.join(H, 'vendor'))) { - 写入本地文件build/materialize3.js:44
fs.mkdirSync(DSAI, { recursive: true }) - 删除本地文件build/materialize3.js:68
try { fs.unlinkSync(p); deleted++ } catch {} - 删除本地文件build/materialize3.js:72
fs.unlinkSync(p) - 删除本地文件build/materialize3.js:76
fs.unlinkSync(p) - 写入本地文件build/materialize3.js:77
fs.copyFileSync(r, p) - 删除本地文件build/trim.js:17
fs.rmSync(out, { recursive: true, force: true }) - 读取本地文件build/trim.js:27
try { entries = fs.readdirSync(dir, { withFileTypes: true }) } catch { return } - 读取本地文件build/trim.js:33
if (fs.existsSync(dsai)) { - 删除本地文件build/trim.js:34
fs.rmSync(dsai, { recursive: true, force: true }) - 读取本地文件build/trim.js:44
if (fs.existsSync(base)) walkDirs(base) - 读取本地文件build/trim.js:51
if (fs.existsSync(feSrc)) { - 删除本地文件build/trim.js:52
fs.rmSync(feDst, { recursive: true, force: true }) - 读取本地文件build/trim.js:59
console.log('web-frontend copied:', fs.existsSync(path.join(feDst, 'dist', 'index.html'))) - 读取本地文件build/trim.js:65
try { entries = fs.readdirSync(dir, { withFileTypes: true }) } catch { return }
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
README
由 DeepSeek 最新模型翻译生成DeepSeek Harness 桌面版
把 deepseek-ai/deepseek-harness 打包成三平台桌面应用: Electron 桌面壳 + 内置 Node 运行时 + 完整 Harness 环境,双击即用。
DeepSeek
✨ 特性
- 一键启动:双击 DeepSeekHarness.exe → 自动拉起后端 → 直接打开 DeepSeek Harness Web UI
- 内置 Node 24:自包含运行时,用户无需安装 Node.js
- 完整环境:打包了 Harness 全部依赖(链接已物化为真实文件)
- 无边框窗口:UI 铺满窗口,右上角内嵌最小化 / 最大化 / 关闭按钮
- 单实例:重复启动不会拉起多个后端
- 免管理员:Windows 安装到 %LocalAppData%\Programs\DeepSeek Harness
📦 产物
| 平台 | 文件 | 说明 |
| Windows | installers/DeepSeekHarnessSetup-.exe | Inno Setup 一键安装包 |
| Windows | build/DeepSeekHarnessApp/DeepSeekHarness.exe | 免安装版(直接运行) |
展开完整文档(README 剩余 1 节)
DeepSeek Harness 桌面版 把 deepseek-ai/deepseek-harness 打包成三平台桌面应用: Electron 桌面壳 + 内置 Node 运行时 + 完整 Harness 环境,双击即用。 DeepSeek ✨ 特性 - 一键启动:双击 DeepSeekHarness.exe → 自动拉起后端 → 直接打开 DeepSeek Harness Web UI - 内置 Node 24:自包含运行时,用户无需安装 Node.js - 完整环境:打包了 Harness 全部依赖(链接已物化为真实文件) - 无边框窗口:UI 铺满窗口,右上角内嵌最小化 / 最大化 / 关闭按钮 - 单实例:重复启动不会拉起多个后端 - 免管理员:Windows 安装到 %LocalAppData%\Programs\DeepSeek Harness 📦 产物 | 平台 | 文件 | 说明 | | Windows | installers/DeepSeekHarnessSetup-.exe | Inno Setup 一键安装包 | | Windows | build/DeepSeekHarnessApp/DeepSeekHarness.exe | 免安装版(直接运行) | | macOS | installers/DeepSeekHarness-macOS-<arch>-<ver>.dmg | 应用镜像(.app,ad-hoc 签名) | | Linux | installers/DeepSeekHarness-linux-<arch>-<ver>.tar.gz | 免安装压缩包(解压即用) | | Linux | installers/deepseek-harness_<ver>_<arch>.deb | Debian/Ubuntu 安装包 | 三平台均由 GitHub Actions 自动构建(.github/workflows/build.yml 矩阵),推送 v 标签时自动发布到 Release;也可 workflow_dispatch 手动触发。 🗂 目录结构 app/ Electron 桌面应用源码 main.js 主进程:启动后端、注入窗口控制按钮 preload.js / titlebar-preload.js preload 脚本 renderer/ 渲染页面 build/ 构建脚本与产物(跨平台,Node 实现) build-harness.js 克隆 deepseek-harness、准备 .npmrc、pnpm 构建 materialize3.js node_modules 链接物化(消除 junction/符号链接) download-node.js 按平台下载内置 Node 运行时(win/darwin/linux × x64/arm64) trim.js 精简 harness(跨平台版 trim.ps1) assemble.js 组装应用目录(Windows robocopy / POSIX cp -aL) convert-icon.js SVG -> ICO(png-to-ico)+ PNG 源图 assemble.ps1 / trim.ps1 Windows 本地构建脚本(与 assemble.js/trim.js 等价) setup.iss Inno Setup 安装脚本(本地/CI 均可用) log.svg 应用图标(DeepSeek logo) 🔧 构建流程 本地需要:Node.js ≥ 22、pnpm 10(注意:必须用 pnpm 10, pnpm 11 移除了 hoisted linker);Windows 额外需要 Inno Setup 7。 CI 三平台全自动,无需本地环境。 1. 准备 Harness 依赖(pnpm 10 + hoisted) node build/build-harness.js # 克隆 → 删 packageManager → .npmrc(hoisted) → pnpm install → pnpm build 2. 物化链接 + 精简 node build/materialize3.js resources/harness # junction/符号链接 → 真实文件 node build/trim.js # 删除冗余 @deepseek-ai 副本、拷贝 web 前端 3. 运行时 + 组装 node build/download-node.js v24.14.0 # 内置 Node(按当前平台/架构) npm install # electron + sharp + png-to-ico node build/convert-icon.js log.svg build/app.ico node build/assemble.js # 组装到 build/DeepSeekHarnessApp 4. 打包 Windows & "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" "/DProjectDir=$((Get-Location).Path)" setup.iss macOS hdiutil create -volname "DeepSeek Harness" -srcfolder build/DeepSeekHarnessApp/DeepSeekHarness.app -ov -format UDZO installers/DeepSeekHarness-macOS-$(uname -m).dmg Linuxbash tar -C build/DeepSeekHarnessApp -czf installers/DeepSeekHarness-linux.tar.gz DeepSeekHarness 🚀 使用 1. 双击 DeepSeekHarnessSetup-*.exe 安装(免管理员,自动建桌面快捷方式) 2. 双击桌面「DeepSeek Harness」图标 3. 首次使用:在 Web 界面设置 DeepSeek API Key ⚠️ 注意 - 用户数据存放在 ~/.dsh(与安装目录分离),卸载后保留 - 服务监听 http://127.0.0.1:3080,关闭窗口即停止 📄 许可 MIT。Harness 本体版权归 DeepSeek AI 所有,见上游仓库。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
wess09/DeepSeekHarnessDesktop
DeepSeekHarness桌面端打包
相关插件 · 桌面端
Codex 任务面板chuspeeism/dashi-taskboard
现代化可灵活嵌入的任务面板,支持 Codex、DeepSeek Harness
★ 3,409已汉化DSH
71.7
多智能体自进化开发平台Prism-Shadow/penguin-harness
统一、稳定的 Agent 自进化框架全自动优化:任意模型 · 任意算法 · 任意 Benchmark
★ 3,111已汉化DSH
71.1
桌面宠物PC2005-cloud/dsh-pet
DSH 桌面宠物:一行命令装好即用的透明动画小桌宠,支持多开、大小位置随心配置;还内置 DIY 素材链,能用 AI…
★ 5,341已汉化DSH
71
多端 Agent 工作台GCWing/OpenBitFun
OpenBitFun 是一个高度可定制的开源 Agent 工作台,让任务按你的方式持续推进。
★ 3,449已汉化DSH
70.8
DSH Desktopanywhere-labs/dsh-desktop
为 DeepSeek Harness DSH 插件生态打造的现代化桌面端解决方案。万物皆「插件」,桌面本身也是「插件」。
★ 34,532已汉化DSH
70.7
桌面宠物伴侣OpenPetsHQ/openpets
桌面伴侣平台,带宠物、插件,还能选配本地智能体集成。
★ 1,353已汉化DSH
70.2