🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

Agent 桌面客户端 Minomiao/deepseek-harness-desktop

DeepSeek Harnessv0.2.0
Minomiao38 天前有提交已提供中文文档扫描:含敏感能力

DeepSeek Harness 桌面客户端

28.3/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/21 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查未通过:要求 dsh 0.1.7-rc.2,而最新版为 0.2.1-rc.2;仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Minomiao/deepseek-harness-desktop
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · ui
装得上吗
实装验证未通过(dependency_conflict),装前请到仓库确认最近更新与 issue
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 38 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
⚠︎ 实装验证未通过(dependency_conflict · 2026/9/25) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

要求 dsh 0.1.7-rc.2,而最新版为 0.2.1-rc.2;仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-desktop @ 0.2.0
✓Node 引擎未声明 engines.node
✗dsh CLI 依赖要求 0.1.7-rc.2 · 最新 0.2.1-rc.2 不兼容
✓入口文件main/exports/bin 已声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/20 06:18:56

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 50 处,展示前 38 条)
  • 写入本地文件
    src/main.js:75
    fs.appendFileSync(THEME_LOG, `[${new Date().toISOString()}] ${msg}\n`);
  • 读取本地文件
    src/main.js:96
    const text = fs.readFileSync(path.join(DSH_HOME, 'profiles', 'web', 'cordis.patch.yml'), 'utf8');
  • 读取本地文件
    src/main.js:105
    const text = fs.readFileSync(path.join(DSH_HOME, 'settings.yaml'), 'utf8');
  • 执行外部命令固定命令
    src/main.js:153
    execFile('taskkill', ['/pid', String(proc.pid), '/T', '/F'], () => {});
  • 读取本地文件
    src/main.js:174
    text = fs.readFileSync(patchPath, 'utf8');
  • 写入本地文件
    src/main.js:187
    fs.writeFileSync(
  • 删除本地文件
    src/main.js:211
    fs.rmSync(dir, { recursive: true, force: true });
  • 执行外部命令来自配置/变量
    src/main.js:225
    const child = spawn(process.execPath, [DSH_BIN, 'web', '--port', '0', '--no-open'], {
  • 执行外部命令来自配置/变量
    src/main.js:411
    const child = spawn(process.execPath, [DSH_BIN, 'plugin', '--profile', 'web', ...args], {
  • 执行外部命令来自配置/变量
    src/main.js:444
    const child = spawn(process.execPath, [DSH_BIN, 'web', '--port', '0', '--no-open'], {
  • 执行外部命令固定命令
    src/main.js:456
    execFile('taskkill', ['/pid', String(child.pid), '/T', '/F'], () => {});
  • 读取本地文件
    src/main.js:482
    const m = JSON.parse(fs.readFileSync(p, 'utf8'));
  • 写入本地文件
    src/main.js:487
    fs.writeFileSync(p, JSON.stringify(m, null, 2) + '\n');
  • 读取本地文件
    src/main.js:498
    return JSON.parse(fs.readFileSync(path.join(app.getPath('userData'), 'desktop-settings.json'), 'utf8'));
  • 写入本地文件
    src/main.js:507
    fs.writeFileSync(path.join(app.getPath('userData'), 'desktop-settings.json'), JSON.stringify(current, null, 2));
  • 读取本地文件
    src/main.js:515
    return typeof dir === 'string' && dir && fs.existsSync(dir) ? dir : path.join(DSH_HOME, 'plugins');
  • 执行外部命令固定命令
    src/main.js:521
    execFile('git', ['--version'], (err) => resolve(!err));
  • 发起网络请求
    src/main.js:539
    const res = await net.fetch(url, { signal: AbortSignal.timeout(8000) });
  • 发起网络请求
    src/main.js:557
    res = await net.fetch(url, { signal: controller.signal });
  • 写入本地文件
    src/main.js:569
    const ws = fs.createWriteStream(tmp);
  • 删除本地文件
    src/main.js:589
    fs.unlinkSync(tmp);
  • 写入本地文件
    src/main.js:596
    fs.mkdirSync(destDir, { recursive: true });
  • 删除本地文件
    src/main.js:601
    fs.unlinkSync(tmp);
  • 发起网络请求
    src/main.js:745
    const res = await net.fetch(LATEST_RELEASE_API, {
  • 读取本地文件
    src/plugin-util.js:95
    pkg = JSON.parse(fs.readFileSync(path.join(dir, 'package.json'), 'utf8'));
  • 读取本地文件
    src/plugin-util.js:103
    entries = fs.readdirSync(dir, { withFileTypes: true });
  • 读取本地文件
    src/plugin-util.js:138
    if (fs.existsSync(p)) return p;
  • 读取本地文件
    src/plugin-util.js:142
    if (fs.existsSync(p)) return p;
  • 执行外部命令来自配置/变量
    src/plugin-util.js:150
    const child = spawn(PNPM_EXE, args, {
  • 读取本地文件
    src/plugin-util.js:176
    yaml = fs.readFileSync(wsPath, 'utf8');
  • 写入本地文件
    src/plugin-util.js:185
    fs.writeFileSync(wsPath, yaml);
  • 读取本地文件
    src/plugin-util.js:200
    if (fs.existsSync(path.join(cur, 'pnpm-workspace.yaml'))) return cur;
  • 删除本地文件
    src/plugin-util.js:233
    fs.rmSync(path.join(dir, 'node_modules'), { recursive: true, force: true });
  • 删除本地文件
    src/plugin-util.js:234
    fs.rmSync(path.join(installDir, 'node_modules'), { recursive: true, force: true });
  • 写入本地文件
    src/plugin-util.js:240
    fs.writeFileSync(
  • 删除本地文件
    src/plugin-util.js:246
    fs.rmSync(path.join(dir, 'node_modules'), { recursive: true, force: true });
  • 写入本地文件
    src/plugin-util.js:247
    fs.writeFileSync(wsPath, 'packages:\n - .\n\nnodeLinker: hoisted\nverifyDepsBeforeRun: false\n');
  • 写入本地文件
    src/plugin-util.js:249
    fs.appendFileSync(wsPath, '\nverifyDepsBeforeRun: false\n');
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis-plugin-group@deepseek-ai/dsh@deepseek-ai/dsh-anonymous-user-id@deepseek-ai/dsh-atomic-write@deepseek-ai/dsh-bash-local@deepseek-ai/dsh-compaction@deepseek-ai/dsh-fs@deepseek-ai/dsh-invariants@deepseek-ai/dsh-output-retention@deepseek-ai/dsh-sandbox@deepseek-ai/dsh-scope@deepseek-ai/dsh-session-telemetry
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 封装命令行服务
  • 双击即用桌面应用

README

由 DeepSeek 最新模型翻译生成
DeepSeek Harness Desktop DeepSeek Harness Web 界面的桌面客户端(跨平台)。 项目简介 DeepSeek Harness 是 DeepSeek 官方的 Agent 开发框架。原版要先跑命令行 npx @deepseek-ai/dsh web 启动服务,再在浏览器里访问。本项目用 Electron 把它封装成桌面应用: - 双击即用:自动拉起本机 dsh 服务,界面内嵌在应用窗口中,无需命令行、浏览器或安装 Node.js - 关闭窗口最小化到系统托盘,服务在后台继续运行;托盘菜单可恢复窗口或退出 - 标题栏颜色跟随界面主题(浅色/深色/跟随系统) - 自定义图标、标题,隐藏 Electron 默认菜单栏 - 修复 Windows 目录选择崩溃:自动切换为内置浏览面板,无需原生对话框 - 对话界面顶部优化:28px 窗口拖动条、恢复原生窗口按钮、隐藏导出按钮 - 插件管理:支持 npm 包名 / Git 地址 / 本地路径安装 - 内核对齐上游:内置 DeepSeek Harness 0.1.7(回合导航轨道、侧边栏终端、Office/PDF 预览等) - 跨平台:Windows / macOS / Linux 界面预览 浅色模式 深色模式 安装 | 平台 | 文件 |
展开完整文档(README 剩余 1 节)
DeepSeek Harness Desktop

DeepSeek Harness Web 界面的桌面客户端(跨平台)。

项目简介

DeepSeek Harness 是 DeepSeek 官方的 Agent 开发框架。原版要先跑命令行 npx @deepseek-ai/dsh web 启动服务,再在浏览器里访问。本项目用 Electron 把它封装成桌面应用:

- 双击即用:自动拉起本机 dsh 服务,界面内嵌在应用窗口中,无需命令行、浏览器或安装 Node.js
- 关闭窗口最小化到系统托盘,服务在后台继续运行;托盘菜单可恢复窗口或退出
- 标题栏颜色跟随界面主题(浅色/深色/跟随系统)
- 自定义图标、标题,隐藏 Electron 默认菜单栏
- 修复 Windows 目录选择崩溃:自动切换为内置浏览面板,无需原生对话框
- 对话界面顶部优化:28px 窗口拖动条、恢复原生窗口按钮、隐藏导出按钮
- 插件管理:支持 npm 包名 / Git 地址 / 本地路径安装
- 内核对齐上游:内置 DeepSeek Harness 0.1.7(回合导航轨道、侧边栏终端、Office/PDF 预览等)
- 跨平台:Windows / macOS / Linux

界面预览

浅色模式

深色模式

安装

| 平台 | 文件 |
| Windows | DSH Desktop Setup 0.5.1.exe(安装版)/ DSH Desktop-0.5.1-win-x64.zip(免安装,解压即用) |
| macOS (Apple Silicon) | DSH Desktop-0.5.1-arm64.dmg |
| Linux | DSH Desktop-0.5.1.AppImage |

macOS 版本未签名,首次打开请右键选择"打开";Linux 需先 chmod +x "DSH Desktop-0.5.1.AppImage"。

每个发布产物均附带同名 .sha256 校验文件(由构建流水线自动生成),可用于校验下载完整性:

Windows (PowerShell)
Get-FileHash "DSH Desktop Setup 0.5.1.exe" -Algorithm SHA256

macOS / Linux
shasum -a 256 "DSH Desktop-0.5.1.dmg"
将输出与 .sha256 文件内容比对

首次使用

1. 打开应用,等待服务就绪后自动进入 Harness 界面
2. 配置 API Key:设置环境变量 DEEPSEEK_API_KEY,或在设置页的模型配置中添加提供商
3. 在输入框开始对话

开发

cd desktop-app
npm install # 安装依赖
npm start # 开发模式运行
npm run dist # 打包当前平台安装包

多平台构建

本仓库通过 GitHub Actions 矩阵构建三平台产物(.github/workflows/build.yml):

- 手动触发:Actions 页面 Run workflow
- 打 tag 自动触发:git tag v0.5.1 && git push origin v0.5.1

构建流水线为每个产物(exe / dmg / AppImage / zip)生成同名 .sha256 校验文件并随产物一起上传;Windows 打包不包含 unpacked 目录内容。

技术栈

- Electron 44.0.0 + Node.js 24
- DeepSeek Harness(@deepseek-ai/dsh 0.1.7-rc.2)

Electron 必须钉死在 44.0.0(或 43.0.0),不要用 ^ 或升级补丁版本。
dsh 的 node-addon-require-builtin 按 V8 指纹白名单校验宿主运行时,
仅接受 Electron 43.0.0 / 44.0.0 / 45.0.0-alpha.6,其他版本会在启动时报 unsupported Electron runtime fingerprint。同理 dsh 家族包也需整组同版本升级。

打包必须带上 node_modules/@deepseek-ai 全量(见 build.extraResources)。
dsh 家族里大量包只通过 peerDependencies 互相引用,lockfile 中标记为 peer: true;
electron-builder 收集生产依赖时会跳过这类条目,导致装出来的应用启动即报一串 failed to import / ERR_MODULE_NOT_FOUND(0.1.7 升级时就踩了这个)。
由于 files 的通配符会被依赖树裁剪覆盖、不生效,这里改用 extraResources 把整个 @deepseek-ai scope 叠加进 resources/app/node_modules;该做法依赖 asar: false。
上游每新增一个 peer-only 包都会重新触发该问题,这一条不要删。
预览分享卡片长什么样 ↓Minomiao/deepseek-harness-desktop
分享 · DeepSeek Harness Hub
Minomiao/deepseek-harness-desktop

DeepSeek Harness 桌面客户端

这是你的仓库?认领条目

回到顶部