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

桌面管理器 slaoda/dsh-desktop

DeepSeek Harness
slaoda51 天前有提交已提供中文文档扫描:含敏感能力

图形化安装与切换 Harness 版本并修复启动

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么
dsh 原生插件 · desktop
装得上吗
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 51 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 79 处,展示前 55 条)
  • 读取本地文件
    src/main/backup-manager.ts:51
    const stream = createReadStream(file)
  • 读取本地文件
    src/main/backup-manager.ts:73
    const home = await lstat(this.harnessHome)
  • 写入本地文件
    src/main/backup-manager.ts:75
    await mkdir(this.backupsDir, { recursive: true })
  • 写入本地文件
    src/main/backup-manager.ts:88
    await mkdir(dataRoot, { recursive: true })
  • 写入本地文件
    src/main/backup-manager.ts:101
    await rename(staging, destination)
  • 删除本地文件递归
    src/main/backup-manager.ts:105
    await rm(staging, { recursive: true, force: true })
  • 读取本地文件
    src/main/backup-manager.ts:112
    const info = await lstat(this.harnessHome)
  • 读取本地文件
    src/main/backup-manager.ts:122
    try { names = await readdir(this.backupsDir) } catch (error) {
  • 读取本地文件
    src/main/backup-manager.ts:143
    const sourceStat = await lstat(source)
  • 写入本地文件
    src/main/backup-manager.ts:152
    await mkdir(path.dirname(target), { recursive: true })
  • 写入本地文件
    src/main/backup-manager.ts:153
    await copyFile(source, target)
  • 读取本地文件
    src/main/backup-manager.ts:165
    try { info = await lstat(target) } catch (error) {
  • 写入本地文件
    src/main/backup-manager.ts:192
    await mkdir(path.dirname(destination), { recursive: true })
  • 删除本地文件递归
    src/main/backup-manager.ts:227
    await rm(target, { recursive: true, force: true })
  • 写入本地文件
    src/main/diagnostic-logger.ts:28
    await mkdir(this.directory, { recursive: true })
  • 写入本地文件
    src/main/diagnostic-logger.ts:31
    await appendFile(this.file, `${record}\n`, { encoding: 'utf8', mode: 0o600 })
  • 读取本地文件
    src/main/diagnostic-logger.ts:38
    const current = await stat(this.file)
  • 删除本地文件
    src/main/diagnostic-logger.ts:41
    await rm(rotated, { force: true })
  • 写入本地文件
    src/main/diagnostic-logger.ts:42
    await rename(this.file, rotated)
  • 发起网络请求
    src/main/dsh-supervisor.ts:94
    const response = await fetch(url, { method: 'GET', redirect: 'error', signal: controller.signal })
  • 执行外部命令来自配置/变量
    src/main/dsh-supervisor.ts:131
    const child = spawn(this.nodePath, dshWebArguments(dsh, options.repairOverlay ?? null), {
  • 读取本地文件
    src/main/external-installations.ts:50
    if (existsSync(path.join(current, 'package.json'))) return current
  • 读取本地文件
    src/main/external-installations.ts:104
    const canonicalRoot = await realpath(candidate.packageRoot)
  • 读取本地文件
    src/main/external-installations.ts:105
    const manifest = JSON.parse(await readFile(path.join(canonicalRoot, 'package.json'), 'utf8')) as PackageManifest
  • 读取本地文件
    src/main/external-installations.ts:109
    const entry = await realpath(path.resolve(canonicalRoot, bin))
  • 读取本地文件
    src/main/external-installations.ts:110
    if (!isInside(canonicalRoot, entry) || !(await stat(entry)).isFile()) throw new Error('Harness CLI 逃逸包目录')
  • 读取本地文件
    src/main/external-installations.ts:146
    const hasShim = ['dsh', 'dsh.cmd', 'dsh.exe'].some((name) => existsSync(path.join(directory, name)))
  • 写入剪贴板
    src/main/ipc.ts:81
    clipboard.writeText(redactDiagnostic(clipboardTextSchema.parse(raw)))
  • 执行外部命令来自配置/变量
    src/main/process-utils.ts:15
    const child = spawn(executable, args, {
  • 读取本地文件
    src/main/runtime-paths.ts:30
    if (existsSync(node) && existsSync(npmCli) && existsSync(pnpmCli) && existsSync(pnpmCommand) && existsSync(dshCommand)) {
  • 读取本地文件
    src/main/runtime-paths.ts:38
    if (!localNpm || !existsSync(localPnpm)) throw new Error('开发模式找不到 npm 或 pnpm,请先运行 npm install')
  • 读取本地文件
    src/main/state-store.ts:45
    const parsed = JSON.parse(await readFile(this.file, 'utf8')) as Partial<PersistedState>
  • 写入本地文件
    src/main/state-store.ts:67
    await mkdir(path.dirname(this.file), { recursive: true })
  • 写入本地文件
    src/main/switch-transaction.ts:36
    await mkdir(path.dirname(this.file), { recursive: true })
  • 读取本地文件
    src/main/switch-transaction.ts:43
    const value = JSON.parse(await readFile(this.file, 'utf8')) as Partial<SwitchTransaction> & { schemaVersion?: number }
  • 删除本地文件
    src/main/switch-transaction.ts:60
    await rm(this.file, { force: true })
  • 读取本地文件
    src/main/version-manager.ts:86
    try { names = await readdir(this.versionsDir) } catch (error) {
  • 删除本地文件递归
    src/main/version-manager.ts:91
    .map(async (name) => { await rm(path.join(this.versionsDir, name), { recursive: true, force: true }) }))
  • 读取本地文件
    src/main/version-manager.ts:98
    try { names = await readdir(base) } catch (error) {
  • 读取本地文件
    src/main/version-manager.ts:119
    if (existsSync(installed)) return await this.resolveAt(installed, version, 'installed')
  • 写入本地文件
    src/main/version-manager.ts:127
    await mkdir(this.versionsDir, { recursive: true })
  • 读取本地文件
    src/main/version-manager.ts:129
    if (existsSync(destination)) {
  • 写入本地文件
    src/main/version-manager.ts:134
    await mkdir(staging, { recursive: true })
  • 写入本地文件
    src/main/version-manager.ts:137
    await rename(staging, destination)
  • 删除本地文件递归
    src/main/version-manager.ts:140
    await rm(staging, { recursive: true, force: true })
  • 读取本地文件
    src/main/version-manager.ts:149
    if (!existsSync(destination)) throw new Error('该版本不是用户安装的 DSH 版本')
  • 删除本地文件递归
    src/main/version-manager.ts:151
    await rm(destination, { recursive: true, force: true })
  • 写入本地文件
    src/main/version-manager.ts:161
    await mkdir(this.versionsDir, { recursive: true })
  • 读取本地文件
    src/main/version-manager.ts:166
    const rollbackName = existsSync(destination) ? `.repair-backup-${validatedVersion}-${id}` : null
  • 写入本地文件
    src/main/version-manager.ts:168
    await mkdir(staging, { recursive: true })
  • 写入本地文件
    src/main/version-manager.ts:177
    if (rollbackName) await rename(destination, this.repairPath(rollbackName))
  • 删除本地文件递归
    src/main/version-manager.ts:198
    else await rm(staging, { recursive: true, force: true })
  • 执行外部命令来自配置/变量
    src/main/version-manager.ts:213
    const child = spawn(this.runtime.node, [
  • 删除本地文件递归
    src/main/version-manager.ts:330
    if (committed.rollbackName) await rm(this.repairPath(committed.rollbackName), { recursive: true, force: true })
  • 删除本地文件递归
    src/main/version-manager.ts:331
    await rm(this.repairPath(committed.stagingName), { recursive: true, force: true })
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 图形化安装Harness
  • 版本切换管理
  • 启动修复

DeepSeek Harness 的 Windows 11 图形化安装、版本管理与启动修复工具(社区二次开发)

README

由 DeepSeek 最新模型翻译生成
DSH Desktop 面向 Windows 11 的 DeepSeek Harness 一键安装与版本管理工具。 DSH Desktop 自带 Node.js、pnpm 和经过校验的官方 @deepseek-ai/dsh,普通用户无需准备开发环境即可使用。 本项目由社区独立维护,与 DeepSeek 官方无隶属关系。管理器不修改官方 Harness。 项目来源与二次开发说明 DSH Desktop 是围绕 DeepSeek Harness 进行的社区二次开发,目标是在不改变 Harness 核心能力和配置语义的前提下,为 Windows 11 用户补充图形化安装、版本管理与故障恢复体验。它不是 DeepSeek 官方桌面版,也不是官方仓库的替代品。 - 上游项目: deepseek-ai/deepseek-harness,官方网站为 deepseek.com/harness。 - 上游提供: Harness 核心、CLI、Web 界面、插件体系及官方 @deepseek-ai/dsh 包。 - 本项目新增: Windows 安装器、Electron 桌面外壳、版本检测/安装/切换/卸载、备份回滚、托盘、代理设置、启动诊断与安全修复 GUI。
展开完整文档(README 剩余 1 节)
DSH Desktop
面向 Windows 11 的 DeepSeek Harness 一键安装与版本管理工具。

DSH Desktop 自带 Node.js、pnpm 和经过校验的官方 @deepseek-ai/dsh,普通用户无需准备开发环境即可使用。

本项目由社区独立维护,与 DeepSeek 官方无隶属关系。管理器不修改官方 Harness。

项目来源与二次开发说明

DSH Desktop 是围绕 DeepSeek Harness 进行的社区二次开发,目标是在不改变 Harness 核心能力和配置语义的前提下,为 Windows 11 用户补充图形化安装、版本管理与故障恢复体验。它不是 DeepSeek 官方桌面版,也不是官方仓库的替代品。

- 上游项目: deepseek-ai/deepseek-harness,官方网站为 deepseek.com/harness。
- 上游提供: Harness 核心、CLI、Web 界面、插件体系及官方 @deepseek-ai/dsh 包。
- 本项目新增: Windows 安装器、Electron 桌面外壳、版本检测/安装/切换/卸载、备份回滚、托盘、代理设置、启动诊断与安全修复 GUI。
- 集成方式: 发布包携带经过版本和入口校验的官方 Harness 包;管理器通过公开 CLI 能力启动和管理它,不把上游核心源码改写成本项目实现。
- 问题反馈: 桌面安装、版本管理或启动修复问题请提交到本仓库;Harness 核心和插件行为问题应先在上游项目中确认。

名称与链接仅用于说明项目来源和兼容关系。详细版权及许可证归属见 NOTICE.md。

功能

- Windows 11 x64 图形化安装程序,支持自定义安装目录。
- 安装、保留、切换和卸载指定 Harness 版本。
- 稳定版、预览版和全部版本三个渠道。
- 检测本机已有 Harness;验证通过的独立或全局安装可原地管理,项目依赖保持只读。
- 更新前备份、候选版本健康检查、失败回滚和中断恢复。
- 启动失败诊断与一次安全修复:可处理明确的插件冲突和托管版本损坏,并支持自动、先询问、仅诊断三种模式。
- 配置或配置加会话的选择性备份与恢复,凭据始终排除。
- 系统代理、无凭据手动代理和自定义 npm 镜像。
- 托盘运行、关闭到托盘、开机启动和脱敏诊断日志。
- 简体中文与 English 界面。

安装与使用

1. 运行 DSH-Desktop-Setup--x64.exe。
2. 如 SmartScreen 提示未知发布者,核对发布页 SHA-256 后选择“更多信息 -> 仍要运行”。
3. 启动 DSH Desktop;内置 Harness 可直接运行。
4. 从应用菜单或托盘打开“版本管理”,安装或切换其他版本。
5. API Key 和模型设置只在官方 Harness 页面中填写。

Harness 只监听 127.0.0.1,不会暴露到局域网。Harness 更新由用户在版本管理器中触发;管理器自身当前不提供自动更新。

启动修复

启动失败后,版本管理器会显示“启动修复”卡片和脱敏诊断报告。默认模式只对高置信度、可回滚的问题执行一轮修复和一次重试;也可以在“桌面设置”中改为“修复前询问”或“仅诊断”。

明确的插件冲突会通过启动器自己的 Overlay 暂时禁用插件,不改写 Harness 原始配置。恢复成功后可选择保持禁用、重新启用,或在包来源能被证明且再次确认后卸载。重新启用失败会恢复隔离;自动修复不会卸载插件。

托管版本文件损坏时只重装同一精确版本,不静默升级。外部安装、凭据/认证错误和未知故障只提供诊断,不执行写操作。API Key、Token、.env、凭据和密钥文件不会进入备份、修复报告或日志。

安全边界

- 官方 Harness 在独立的沙箱窗口中运行,不获得 Electron 或管理器 IPC 权限。
- 安装后校验官方包名、精确版本和 CLI 入口。
- 外部路径、URL、版本号、包清单和 IPC 数据均在主进程重新校验。
- 管理器不记录、备份或恢复 API Key、Token、.env 和密钥文件。
- 每次启动最多执行一轮白名单修复和一次重试;所有修复动作带事务记录并可在失败或中断后恢复。
- 卸载托管版本不会删除 Harness 用户目录。

完整规则见 Windows 管理器规格。

开发

开发环境需要 Windows x64 和 Node.js 22.19+:

npm ci
npm run prepare:runtime
npm run dev

常用验证命令:

npm run verify
npm run test:official
npm run package:win:x64
npm run test:packaged

构建资源位于被 Git 忽略的 build-resources/,安装包输出到 release/。发布步骤见 发布指南。

许可证

桌面管理器代码使用 MIT License。DeepSeek Harness 使用其上游 MIT License,官方 Harness 及其他第三方依赖仍按各自许可证授权;完整归属说明见 NOTICE.md,Windows Release 同时附带第三方许可证清单。
预览分享卡片长什么样 ↓slaoda/dsh-desktop
分享 · DeepSeek Harness Hub
slaoda/dsh-desktop

图形化安装与切换 Harness 版本并修复启动

这是你的仓库?认领条目

回到顶部