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

纯壳桌面端 WJBFks/dsh-desktop-pure

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

零侵入纯 WebUI 桌面外壳,用于 DeepSeek Harness(dsh web)

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

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

该插件未发布到 npm,按作者文档从 GitHub 源安装即可(静态检查只覆盖 npm 路径,不代表插件不可用)。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add WJBFks/dsh-desktop-pure
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · ui
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
数据截至 2026/09/27·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 9 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

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

验证判据与等级说明 →

可信度证据

安装兼容性检查需源码安装

仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

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

✗npm 包dsh-desktop-pure(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=18 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

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

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/3 01:01:19

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

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 48 处,展示前 33 条)
  • 执行外部命令来自配置/变量
    main.js:162
    return spawn(process.env.ComSpec || 'cmd.exe', ['/d', '/s', '/c', dshBin, ...args], {
  • 执行外部命令来自配置/变量
    main.js:168
    return spawn(dshBin, args, { stdio });
  • 删除本地文件
    main.js:195
    try { fs.unlinkSync(windowsRecoveryFile()); } catch { }
  • 读取本地文件
    main.js:202
    const encrypted = Buffer.from(fs.readFileSync(windowsRecoveryFile(), 'utf8').trim(), 'base64');
  • 写入本地文件
    main.js:215
    fs.writeFileSync(windowsRecoveryFile(), safeStorage.encryptString(JSON.stringify(record)).toString('base64'), {
  • 执行外部命令固定命令
    main.js:239
    const output = spawnSync('powershell.exe', ['-NoProfile', '-NonInteractive', '-Command', script], {
  • 执行外部命令固定命令
    main.js:257
    child = spawn('powershell.exe', ['-NoProfile', '-NonInteractive', '-Command', script], {
  • 执行外部命令固定命令
    main.js:555
    spawnSync('taskkill', ['/pid', String(child.pid), '/T', '/F'], {
  • 执行外部命令固定命令
    main.js:571
    const result = spawnSync('taskkill', ['/pid', String(pid), '/T', '/F'], {
  • 读取本地文件
    main.js:786
    const record = JSON.parse(fs.readFileSync(startupFile(), 'utf8'));
  • 写入本地文件
    main.js:796
    fs.writeFileSync(startupFile(), JSON.stringify({ page }), { encoding: 'utf8', mode: 0o600 });
  • 读取本地文件
    main.js:811
    const data = JSON.parse(fs.readFileSync(endpointsFile(), 'utf8'));
  • 写入本地文件
    main.js:905
    fs.writeFileSync(temporary, JSON.stringify(obj, null, 2), { encoding: 'utf8', mode: 0o600 });
  • 写入本地文件
    main.js:906
    fs.renameSync(temporary, file);
  • 读取本地文件
    main.js:1629
    const raw = fs.readFileSync(themeFile(), 'utf8');
  • 写入本地文件
    main.js:1640
    fs.writeFileSync(themeFile(), JSON.stringify({ themeSource: source }));
  • 读取本地文件
    main.js:1653
    const obj = JSON.parse(fs.readFileSync(layoutFile(), 'utf8'));
  • 写入本地文件
    main.js:1663
    fs.writeFileSync(layoutFile(), JSON.stringify({ layout: mode }));
  • 读取本地文件
    main.js:3009
    const obj = JSON.parse(fs.readFileSync(shutdownPrefsFile(), 'utf8'));
  • 删除本地文件
    main.js:3964
    try { fs.rmSync(log, { force: true }); } catch { }
  • 发起网络请求
    port-probe.js:77
    const response = await fetch(url, { signal: controller.signal, redirect: 'follow' });
  • 发起网络请求
    port-probe.js:135
    const response = await fetch(tokenUrl, { signal: controller.signal, redirect: 'manual' });
  • 执行外部命令来自配置/变量
    port-probe.js:193
    child = spawn(file, args, { windowsHide: true, stdio: ['ignore', 'pipe', 'ignore'] });
  • 执行外部命令固定命令
    port-probe.js:228
    spawnSync('netstat', ['-ano', '-p', 'TCP'], { encoding: 'utf8', windowsHide: true }).stdout || '';
  • 执行外部命令固定命令
    port-probe.js:232
    spawnSync('lsof', ['-i', `:${port}`, '-s', 'TCP:LISTEN', '-t'], { encoding: 'utf8' }).stdout || '';
  • 执行外部命令固定命令
    port-probe.js:273
    spawnSync('tasklist', ['/FI', `PID eq ${pid}`, '/NH', '/FO', 'CSV'], {
  • 执行外部命令固定命令
    port-probe.js:285
    const out = spawnSync('ps', ['-p', String(pid), '-o', 'comm='], { encoding: 'utf8' }).stdout || '';
  • 读取本地文件
    changelog.js:32
    const stats = await fs.stat(target);
  • 读取本地文件
    changelog.js:34
    return validCache(JSON.parse(await fs.readFile(target, 'utf8')), language);
  • 写入本地文件
    changelog.js:44
    await fs.mkdir(cacheDir, { recursive: true });
  • 写入本地文件
    changelog.js:45
    await fs.writeFile(temporary, JSON.stringify(record), { encoding: 'utf8', mode: 0o600 });
  • 写入本地文件
    changelog.js:46
    await fs.rename(temporary, target);
  • 删除本地文件
    changelog.js:48
    try { await fs.unlink(temporary); } catch { }
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库

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

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

1 张 · 点击查看大图

功能亮点

  • 本地网页装进桌面窗口
  • 零侵入纯WebUI外壳

README

由 DeepSeek 最新模型翻译生成
DSH Desktop Pure 实测 DSH 版本:0.2.1-rc.2 DeepSeek Harness(dsh web)的零侵入纯 WebUI 桌面套壳:用 Electron 把本地 Harness 网页应用装进原生桌面窗口,不修改 DSH 源程序的任何代码、资源与配置。 语言 / Language:🇨🇳 (默认) · 🇬🇧 English ✨ 亮点 - 零侵入:不修改 DSH 代码 / 资源 / 配置,只作为独立桌面外壳运行。 - 多端点:支持 Windows 本机、WSL、自定义远程地址,切换端点不丢失页面会话。 - 关机弹窗:标题栏「关机」按钮列出当前 DSH 进程(本端/外部 × 本地/远程)供勾选,确认后一并退出;桌面端设置集中在「桌面端配置」页。 - WSL 引导:WSL / Node / DSH 未就绪时提供四步引导页,可自动安装并连接。 - Windows 启动失败引导:Windows 本机连接失败时另外提供三步引导(Node/npm、DSH、启动连接);安装只在用户点击后执行。 - 原生体验:自绘标题栏、菜单、托盘、主题切换,保持桌面端使用习惯;所有确认提示均为壳自绘,不使用系统弹窗。
展开完整文档(README 剩余 1 节)
DSH Desktop Pure

实测 DSH 版本:0.2.1-rc.2

DeepSeek Harness(dsh web)的零侵入纯 WebUI 桌面套壳:用 Electron 把本地 Harness 网页应用装进原生桌面窗口,不修改 DSH 源程序的任何代码、资源与配置。

语言 / Language:🇨🇳 (默认) · 🇬🇧 English

✨ 亮点

- 零侵入:不修改 DSH 代码 / 资源 / 配置,只作为独立桌面外壳运行。
- 多端点:支持 Windows 本机、WSL、自定义远程地址,切换端点不丢失页面会话。
- 关机弹窗:标题栏「关机」按钮列出当前 DSH 进程(本端/外部 × 本地/远程)供勾选,确认后一并退出;桌面端设置集中在「桌面端配置」页。
- WSL 引导:WSL / Node / DSH 未就绪时提供四步引导页,可自动安装并连接。
- Windows 启动失败引导:Windows 本机连接失败时另外提供三步引导(Node/npm、DSH、启动连接);安装只在用户点击后执行。
- 原生体验:自绘标题栏、菜单、托盘、主题切换,保持桌面端使用习惯;所有确认提示均为壳自绘,不使用系统弹窗。

📌 与 DSH 完全独立(重要声明)

DSH Desktop Pure 与 DSH 是完全独立的项目,二者可以分开更新:

- ✅ 你可以只更新 DSH 而不更新 DSH Desktop Pure(npm update -g @deepseek-ai/dsh 后重启本应用即可);
- ✅ 应用与 DSH 可独立更新,但 DSH 的认证或协议变化可能要求升级 DSH Desktop Pure;v0.4.0 的 Token 认证适配、v0.5.0 的恢复凭据失效自愈就是一个例子。
- ✅ 本应用对 DSH 的读取有降级路径;若 DSH 更新导致兼容性问题,可能需要根据提示升级桌面端,而不保证旧版本始终无需调整。

🔐 DSH Web Token 兼容性

DSH Desktop Pure 自 v0.4.0 起适配 DSH 的 Web Token 认证:自动启动输出的 Token URL 与 303/cookie 握手、Windows 手动输入完整 URL 或仅 Token、远程端点 Token,以及标题栏 Token 默认脱敏并支持悬停显示;v0.5.0 起恢复凭据无法验证时可确认并自动重启旧 DSH 完成自愈。Token 认证不是模型 API key,应用不会绕过认证;未来 DSH 版本的兼容性仍需按实际认证/协议变化确认。

- Windows token 恢复:新版 token DSH 启动成功后加密保存最小恢复凭据;桌面进程异常退出但 dsh web 遗留时,下次启动会核验端口进程身份(含 --port 0 动态端口)并严格验证 token 的 303/cookie 握手后自动复用,后续健康检查和会话复用也沿用该握手。正常退出仅停止已验证的恢复进程,且成功后才清理记录;子进程异常退出会清理记录。明确的 DSH 401 快速失败,陌生 401 不会被当作 DSH。其他终端手动启动且本应用从未拿到 token 时,需使用终端打印的完整 URL。

设计原则

| 原则 | 含义 |
| 零侵入 DSH 本体 | 壳里不包含任何 DSH 代码、前端资源或配置;不 patch、不 hook、不改动 DSH 安装目录里的任何文件 |
| 仅读取 | 对 DSH 的一切交互都是只读的:HTTP 探测端口、读取自己拉起的子进程 stdout、spawn / kill 自己拉起的 dsh web 进程 |
| 纯 WebUI 套壳 | 界面默认由 dsh web 提供;壳只绘制自己的标题栏 / 下拉菜单 / 加载页 / 内置 DSH Desktop Pure 页 / 托盘(几个壳自有的静态 HTML),从不注入或修改 Harness 的 DOM |
| 不修改源程序 | Harness 页面、window.__DSH_BOOT__ 注入、/api/ RPC 全部原样来自 dsh web 进程,壳只负责把它加载进来并加桌面化外壳 |

功能

- 端口策略(单端口,绝不静默漂移):复用优先(端口已有 Harness → 直接复用,状态标注「已复用」);端口空闲 → 自动拉起 dsh web;被其他进程占用 → 弹窗给出进程名 + PID,「重试 / 改用 DSH Desktop Pure / 退出」。
- 自绘单行标题栏:状态点(🔵 Pure 页 / 🟢 已连接 / 🟡 启动中 / 🔴 已断开)+ 文件 / 视图 / 服务器 菜单(固定在按钮正下方弹出、打开时 hover 即切换)+「在浏览器中打开」+「关机」+ 窗口控制(Win/Linux 自绘,macOS 原生交通灯);窗口标题固定为 DSH Desktop Pure*。
- 关机弹窗与关闭提示:「关机」按钮弹出壳自绘确认窗,列出已开启的 DSH 进程(本端启动 / 外部启动 × 本地 / 远程四象限,远程仅展示),勾选者随桌面端一并退出,默认勾选可在「桌面端配置 → 关机」设置;✕ 关闭弹出「隐藏到系统托盘」提示,可勾选「不再提示」。
- 内置「桌面端配置」页(DSH Desktop Pure 页):标题栏「文件」左侧的「页面」按钮可下拉切换 桌面端配置 / DSH Web。纯页参考 DSH Web 设置页风格(启动 / 外观 / DSH Web / 关机 / 更新日志 / 关于 六个分区),支持浅色 / 深色,并提供全屏 / 卡片布局切换(持久化);DSH Web 分区支持多端点 Tab——自动判断当前系统(Windows 本机)、自动检测并拉起 WSL 内的 dsh web、可添加自定义远程地址(持久化);Windows 本机启动失败时提供三步引导(Node/npm / DSH / 启动连接),支持复制手动命令、重新检测,并显示安装进度与失败信息;Node 一键安装使用 winget 的 OpenJS.NodeJS.LTS,缺少 winget 时提示从 nodejs.org 手动安装 LTS;DSH 一键安装执行 npm install -g @deepseek-ai/dsh,均仅在用户点击后执行;完全独立于 dsh web——服务未启动也能用;启动默认打开 Windows 页面,连不上则停留在端点自己的路由层状态页,不退出应用。
- 系统托盘:点 ✕(带可关闭的提示)或「文件 → 最小化到托盘」隐藏到托盘,dsh 服务器后台继续运行;托盘右键:打开窗口 / 重启 dsh 服务器 / 退出(「退出」与标题栏「关机」走同一确认弹窗,所有退出路径都会移除托盘图标)。
- 重启 dsh 服务器:一键重启(兼容自建 / 复用实例),期间显示主题感知加载页,不退出应用;失败仅弹非阻塞警告,可重试。
- 主题:浅色 / 深色 / 跟随系统(nativeTheme,持久化到 userData/theme.json),壳 UI 自动换肤。
- 安全加固:渲染进程 sandbox + contextIsolation + 无 nodeIntegration;导航白名单为 loopback + 已注册端点主机(WSL IP / 远程地址);其它外链交系统浏览器;禁用 <webview>。
- 版本漂移安全:对 DSH 的每一处读取都有降级路径——失效时警告 / 保守处理,绝不崩溃。
- 单实例:重复启动把已有窗口提到前台。
- 关于页版本检查:shell ready 后会非阻塞地自动检查一次 GitHub 最新正式 Release,关于页仍可手动检查,并显示 current / new / ahead / none / error 状态。有更新时右上角显示黄色感叹号,点击直达桌面端配置页的关于分区,更新区域会高亮;无更新或检查失败不会显示更新提示。若 Release 提供 assets,则通过系统浏览器提供手动安装下载入口;不会自动覆盖或执行安装。预发布版本不作为默认升级目标,GitHub 限流或离线时可重试并回退到 Release 页面。

跨平台

| 平台 | 测试状态 | 安装包 |
| Windows | ✅ 已完整测试 | ✅ 已发布 |
| macOS | ⚠️ 暂未测试 | ⚠️ 即将发布 |
| Linux | ⚠️ 暂未测试 | ⚠️ 即将发布 |

代码层已完成全平台分支(进程管理、端口识别、窗口样式、快捷键、主题、托盘);macOS / Linux 可自行构建体验,欢迎测试反馈与 PR。

后续计划(Roadmap)

1. 自定义端口 —— 已支持 --port / DSH_DESKTOP_PORT;计划增强为界面化配置 + 持久化。
2. 远程 DSH Web 增强 —— 自定义远程地址已支持(v0.3.0,只读连接);后续可评估远端启动 / 重启等管理能力。
3. 配套 DSH 插件(增强桌面端体验) —— 以 DSH 插件形式提供增强能力。定位明确:开发重心始终在桌面端本体,不会转移到「插件 ↔ 桌面端联动」;插件是可选增强,不安装插件也保留绝大部分正常体验,桌面端绝不依赖插件即可完整使用。

安装与运行

1. Windows 启动失败时:按页面三步引导分别处理 Node/npm、DSH 与启动连接。Node 可点击一键安装(需要 winget),DSH 可点击一键执行全局 npm 安装;也可复制手动命令或重新检测。缺少 winget 时,请从 nodejs.org 手动安装 LTS 版 Node.js。

手动安装 DSH:

npm install -g @deepseek-ai/dsh

2. Windows 用户:到 Releases 下载 Windows 安装包,安装后双击运行即可。

其他平台的构建方式、从源码运行、命令行配置等,详见 详细说明。

更多文档

- 📖 详细说明 —— 行为说明 / 从源码运行 / 升级 DSH / 安全说明 / 目录结构 / 打包发布,面向进阶用户与贡献者。
- 📝 更新日志 —— 各版本的重要变更(English)。

License

MIT © 2026 WJBFks
预览分享卡片长什么样 ↓WJBFks/dsh-desktop-pure
分享 · DeepSeek Harness Hub
WJBFks/dsh-desktop-pure

零侵入纯 WebUI 桌面外壳,用于 DeepSeek Harness(dsh web)

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