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

桌面外壳 sender-dev/dsh-desktop

DeepSeek Harness
sender-dev77 天前有提交已提供中文文档扫描:高危

把本地 Harness 封装成开箱即用的桌面应用

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

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add sender-dev/dsh-desktop
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么[目录]—
dsh 原生插件 · market
暂无时间戳·判据 →
装得上吗[实装验证]!
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
数据截至 2026/10/02·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 77 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

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

验证判据与等级说明 →

可信度证据

⚠︎ 实装验证未通过(unknown · 2026/10/2) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
🔴 安全扫描发现高危能力自动 · 静态分析源码
v2.7.0
🔴 扫描:高危尚无人工评估

静态扫描发现安装期即执行代码,或命令参数由运行时变量拼接(参数来源无法静态判定,从严处理)。

安装时即执行脚本可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 59 处,展示前 55 条)
  • 写入本地文件
    scripts/install-brand-assets.mjs:30
    await mkdir(destinationDirectory, { recursive: true })
  • 写入本地文件
    scripts/install-brand-assets.mjs:31
    await copyFile(source, destination)
  • 写入本地文件
    scripts/install-brand-assets.mjs:32
    await copyFile(lightSource, lightDestination)
  • 写入本地文件
    scripts/install-brand-assets.mjs:33
    await copyFile(darkSource, darkDestination)
  • 读取本地文件
    scripts/install-brand-assets.mjs:35
    const index = await readFile(indexPath, 'utf8')
  • 写入本地文件
    scripts/install-brand-assets.mjs:36
    await writeFile(
  • 读取本地文件
    scripts/install-brand-assets.mjs:46
    const manifest = await readFile(manifestPath, 'utf8')
  • 写入本地文件
    scripts/install-brand-assets.mjs:47
    await writeFile(
  • 发起网络请求
    packages/dsh-desktop-market-installer/client.js:137
    const response = await fetch(STATUS_PATH, {
  • 发起网络请求
    packages/dsh-desktop-market-installer/client.js:273
    const response = await fetch(UNINSTALL_PATH, {
  • 发起网络请求
    packages/dsh-desktop-market-installer/client.js:507
    const response = await fetch(INSTALL_PATH, {
  • 读取本地文件
    packages/dsh-desktop-market-installer/index.js:39
    return readObject(await readFile(path, 'utf8'))
  • 读取本地文件
    packages/dsh-desktop-market-installer/index.js:111
    const entry = candidates.find((candidate) => existsSync(candidate))
  • 写入本地文件
    packages/dsh-desktop-market-installer/index.js:118
    await mkdir(directory, { recursive: true })
  • 写入本地文件
    packages/dsh-desktop-market-installer/index.js:124
    await writeFile(
  • 写入本地文件
    packages/dsh-desktop-market-installer/index.js:130
    await writeFile(
  • 写入本地文件
    packages/dsh-desktop-market-installer/index.js:137
    await writeFile(
  • 写入本地文件
    packages/dsh-desktop-market-installer/index.js:142
    await chmod(pnpmPath, 0o755)
  • 写入本地文件
    packages/dsh-desktop-market-installer/index.js:144
    await writeFile(
  • 执行外部命令固定命令
    packages/dsh-desktop-market-installer/index.js:200
    spawn('taskkill', ['/pid', String(child.pid), '/t', '/f'], {
  • 读取本地文件
    packages/dsh-desktop-market-installer/index.js:281
    manifestSnapshot = await readFile(manifestPath, 'utf8')
  • 执行外部命令来自配置/变量
    packages/dsh-desktop-market-installer/index.js:288
    const child = spawn(process.execPath, buildInstallArguments(), {
  • 读取本地文件
    packages/dsh-desktop-market-installer/index.js:365
    manifestSnapshot = await readFile(manifestPath, 'utf8')
  • 执行外部命令来自配置/变量
    packages/dsh-desktop-market-installer/index.js:372
    const child = spawn(process.execPath, buildUninstallArguments(), {
  • 执行外部命令固定命令
    scripts/generate-app-icons.mjs:15
    execFileSync('rsvg-convert', [
  • 删除本地文件递归
    scripts/generate-app-icons.mjs:25
    await rm(iconsetDirectory, { recursive: true, force: true })
  • 写入本地文件
    scripts/generate-app-icons.mjs:26
    await mkdir(iconsetDirectory, { recursive: true })
  • 执行外部命令固定命令
    scripts/generate-app-icons.mjs:29
    execFileSync('sips', [
  • 执行外部命令固定命令
    scripts/generate-app-icons.mjs:37
    execFileSync('sips', [
  • 执行外部命令固定命令
    scripts/generate-app-icons.mjs:47
    execFileSync('iconutil', ['-c', 'icns', iconsetDirectory, '-o', icnsDestination])
  • 执行外部命令固定命令
    scripts/generate-app-icons.mjs:54
    execFileSync('sips', [
  • 读取本地文件
    scripts/generate-app-icons.mjs:62
    icoImages.push(await readFile(destination))
  • 写入本地文件
    scripts/generate-app-icons.mjs:84
    await writeFile(icoDestination, Buffer.concat([header, ...icoImages]))
  • 删除本地文件递归
    scripts/generate-app-icons.mjs:85
    await rm(icoDirectory, { recursive: true, force: true })
  • 读取本地文件
    scripts/generate-app-icons.mjs:87
    const icon = await readFile(pngDestination)
  • 读取本地文件
    scripts/merge-mac-update-metadata.mjs:67
    readFile(arm64Path, 'utf8').then(parse),
  • 读取本地文件
    scripts/merge-mac-update-metadata.mjs:68
    readFile(x64Path, 'utf8').then(parse)
  • 写入本地文件
    scripts/merge-mac-update-metadata.mjs:71
    await writeFile(outputPath, stringify(merged), 'utf8')
  • 发起网络请求
    scripts/prepare-macos-signing-keychain.mjs:32
    const response = await fetch(source)
  • 写入本地文件
    scripts/prepare-macos-signing-keychain.mjs:34
    await writeFile(destination, Buffer.from(await response.arrayBuffer()), { mode: 0o600 })
  • 写入本地文件
    scripts/prepare-macos-signing-keychain.mjs:39
    await writeFile(destination, Buffer.from(source.slice(dataPrefix.length), 'base64'), {
  • 发起网络请求
    scripts/prepare-macos-signing-keychain.mjs:45
    const response = await fetch(source)
  • 写入本地文件
    scripts/prepare-macos-signing-keychain.mjs:54
    await writeFile(destination, certificate, { mode: 0o600 })
  • 写入本地文件
    scripts/prepare-macos-signing-keychain.mjs:74
    await chmod(certificatePath, 0o600)
  • 写入本地文件
    scripts/prepare-macos-signing-keychain.mjs:79
    await writeFile(keychainListPath, originalKeychains.join('\n'), { mode: 0o600 })
  • 删除本地文件
    scripts/prepare-macos-signing-keychain.mjs:102
    await rm(intermediateCertificatePath, { force: true })
  • 写入本地文件
    scripts/prepare-macos-signing-keychain.mjs:126
    await appendFile(
  • 删除本地文件
    scripts/prepare-macos-signing-keychain.mjs:135
    await security('delete-keychain', keychainPath).catch(() => rm(keychainPath, { force: true }))
  • 删除本地文件
    scripts/prepare-macos-signing-keychain.mjs:136
    await rm(certificatePath, { force: true })
  • 删除本地文件
    scripts/prepare-macos-signing-keychain.mjs:137
    await rm(intermediateCertificatePath, { force: true })
  • 删除本地文件
    scripts/prepare-macos-signing-keychain.mjs:138
    await rm(keychainListPath, { force: true })
  • 读取本地文件
    src/main/index.ts:42
    readFileSync(join(app.getAppPath(), 'package.json'), 'utf8')
  • 读取本地文件
    src/main/index.ts:154
    readFileSync(join(app.getPath('userData'), 'harness', 'settings.yaml'), 'utf8')
  • 读取本地文件
    src/main/index.ts:165
    readFileSync(join(app.getPath('userData'), 'harness', 'settings.yaml'), 'utf8')
  • 执行外部命令来自配置/变量
    src/main/index.ts:463
    launchProcess: (executablePath, args, options) => spawn(executablePath, args, options),
扫描于 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-code-runtime@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
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 封装本地Harness
  • 开箱即用桌面应用
  • 本地优先跨平台

本地优先、跨平台的 DeepSeek Harness 桌面外壳。

README

由 DeepSeek 最新模型翻译生成
DSH Desktop A local-first, cross-platform desktop shell for DeepSeek Harness. English · 简体中文 DSH Desktop 的 Preset、模型提供方与手机控制能力 除了 DeepSeek 官方模型,DSH Desktop 也支持主流第三方模型提供方。更多基于 DSH 的有趣桌面体验即将推出。 DSH Desktop 把 DeepSeek Harness 的本地 Web 体验封装为桌面应用:应用会自动启动本地 Harness、管理随机回环端口、持久化 Profile/插件/会话,并在 Harness 就绪后直接进入完整界面。项目工作区在 Harness 界面中统一添加和管理。 [!IMPORTANT] DSH Desktop 当前处于早期预览阶段,并依赖仍在快速迭代的 @deepseek-ai/dsh@0.1.0-rc.7。macOS 正式包已完成代码签名并通过 Apple 公证,当前安装包统一通过官网分发。 下载安装 请前往 DSH Desktop 官网下载 macOS、Windows 和 Linux 安装包。 已安装的 macOS 和 Windows 版本会在启动后及每六小时自动检查更新。更新将在后台下载,准备完成后提示重启安装;也可以从应用菜单选择 检查更新… 手动检查。
展开完整文档(README 剩余 1 节)
DSH Desktop

A local-first, cross-platform desktop shell for
DeepSeek Harness.

English · 简体中文

DSH Desktop 的 Preset、模型提供方与手机控制能力

除了 DeepSeek 官方模型,DSH Desktop 也支持主流第三方模型提供方。更多基于 DSH 的有趣桌面体验即将推出。

DSH Desktop 把 DeepSeek Harness 的本地 Web 体验封装为桌面应用:应用会自动启动本地 Harness、管理随机回环端口、持久化 Profile/插件/会话,并在 Harness 就绪后直接进入完整界面。项目工作区在 Harness 界面中统一添加和管理。

[!IMPORTANT]
DSH Desktop 当前处于早期预览阶段,并依赖仍在快速迭代的 @deepseek-ai/dsh@0.1.0-rc.7。macOS 正式包已完成代码签名并通过 Apple 公证,当前安装包统一通过官网分发。

下载安装

请前往 DSH Desktop 官网下载 macOS、Windows 和 Linux 安装包。

已安装的 macOS 和 Windows 版本会在启动后及每六小时自动检查更新。更新将在后台下载,准备完成后提示重启安装;也可以从应用菜单选择 检查更新… 手动检查。

加入社区

使用微信扫描下方二维码,加入 DSH Desktop 微信交流群。

也可以加入 DSH Desktop Discord 社区。

为什么做这个项目

DeepSeek Harness 本身提供完整的 Agent Runtime 与 Web UI。DSH Desktop 不重新实现 Harness,而是补上桌面产品所需的宿主能力:

- 无需手动运行 CLI 或管理本地端口
- 启动时自动创建应用专属的 Harness 启动目录
- 通过 Harness 内置目录选择器统一添加和管理项目工作区
- 统一管理 Harness 子进程、启动检测、日志与退出
- 把 Profile、插件和会话保存在应用安装目录之外,升级应用不丢数据
- 提供 macOS、Windows 和 Linux 安装包构建入口

功能

- 启动后直接进入 Harness,不设置额外首页
- 启动时无需先选择目录,自动创建并复用应用内部启动目录
- Harness 启动失败时支持重试、查看日志或退出
- Harness 菜单支持重启子进程与查看日志
- 退出桌面应用时优雅终止 Harness 子进程
- 每次启动仅监听随机的 127.0.0.1 端口
- Renderer 关闭 Node.js 权限,启用 contextIsolation、sandbox 与导航限制
- 在桌面窗口与 Harness 侧栏统一使用 DSH 品牌 Logo
- 可把完整的自定义 Agent 预设导入/导出为便携的 .dshpreset 压缩包,安装前会检查命名冲突并提示信任风险
- 正式 DSH 应用图标,支持 macOS ICNS 与 Windows ICO

友情链接

dsh-market — DeepSeek Harness 插件市场:浏览、搜索社区 900+ 插件,截图预览、一键安装 / 更新 / 启停 / 换主题,多数插件免重启即时生效。

快速开始

环境要求

- Node.js 22 或更新版本
- npm
- macOS Apple Silicon/Intel、Windows x64,或 Linux ARM64/x64

本地开发

git clone https://github.com/sender-dev/dsh-desktop.git
cd dsh-desktop
npm install
npm run dev

npm install 会运行 patch-package,重放 DSH Desktop 对 Harness 首次模型配置、Preset 压缩包导入导出和侧栏品牌的定制,安装品牌静态资源,然后安装 Electron Runtime。

质量检查

npm test
npm run typecheck
npm run build

打包

在当前 Mac 架构上生成未签名 DMG 与 ZIP
npm run package:mac

分别在对应架构的 Mac/CI Runner 上执行
npm run package:mac:arm64
npm run package:mac:x64

在 Windows x64 机器/Runner 上生成 NSIS
npm run package:win

在对应的原生 Linux Runner 上生成安装包
npm run package:linux
npm run package:linux:arm64

Harness 包含架构相关原生模块。macOS ARM64、macOS Intel、Windows x64、Linux x64 与 Linux ARM64 都应在对应平台上重新安装依赖并构建。架构专用脚本会在打包前检查当前 platform/arch,避免生成看似成功、实际缺少原生依赖的安装包。

运行架构

DSH Desktop (Electron Main)
├── 应用专属启动目录 ├── Harness 子进程生命周期 ├── 随机回环端口与启动检测 ├── 原生日志/错误恢复入口 └── 安全 BrowserWindow └── http://127.0.0.1: DeepSeek Harness Web UI

Electron userData
├── launch-root/
├── logs/harness.log
└── harness/
├── profiles/
├── sessions/
└── 插件与用户数据

Harness 运行在独立的 Electron Node 子进程中。Cordis HMR 所需的 --expose-internals 只授予该子进程,不会授予 Web Renderer。

项目结构

src/main/ Electron 主进程、窗口与 Harness 生命周期 src/shared/ 共享运行时类型 patches/ 对固定 DSH 版本的可复现界面定制 scripts/ 品牌资源安装与目标平台打包检查 test/ 设置、运行时、安全和 Provider 覆盖测试 build/ 应用图标资源

当前验证状态

- macOS Apple Silicon:开发运行、真实 Harness 启动、DMG 打包、代码签名、Apple 公证与挂载验证均已完成
- macOS Intel:打包配置与平台检查已提供,需要在 Intel Mac/Runner 上完成运行验证
- Windows x64:NSIS/Portable 配置与平台检查已提供,需要在 Windows/Runner 上完成运行验证
- Windows ARM64:当前不支持
- 自动更新:尚未接入

上游版本与补丁

项目当前固定依赖 @deepseek-ai/dsh@0.1.0-rc.7。首启 Provider 列表与桌面端 Preset 导入导出界面由 patch-package 固化在 patches/ 中,而不是依赖未跟踪的 node_modules 修改。

升级 DSH 时必须:

1. 核对上游 Settings/Credentials 与 Provider Directory 契约;
2. 重新应用或重写首启界面定制;
3. 重新生成补丁;
4. 完成真实 Harness 启动与 Provider 配置回归。

贡献

欢迎提交 Issue 与 Pull Request。提交前请至少运行:

npm test
npm run typecheck
npm run build

请勿在 Issue、日志、截图或测试数据中提交真实 API Key。

许可证

本项目采用 MIT License 开源。

DeepSeek Harness 及其依赖仍遵循各自的上游许可证与商标规则。DSH Desktop 是独立的社区桌面封装项目。
预览分享卡片长什么样 ↓sender-dev/dsh-desktop
分享 · DeepSeek Harness Hub
sender-dev/dsh-desktop

把本地 Harness 封装成开箱即用的桌面应用

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部