把浏览器里的 dsh web 包装成双击即用的桌面应用
25.6/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/12 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add 165555979/dsh-desktop该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:待复验
是什么
dsh 原生插件 · dev
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 74 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 57 处,展示前 55 条)
- 读取本地文件main.js:35
try { return JSON.parse(fs.readFileSync(settingsFile(), 'utf8')) } catch { return {} } - 写入本地文件main.js:39
fs.mkdirSync(path.dirname(settingsFile()), { recursive: true }) - 写入本地文件main.js:40
fs.writeFileSync(settingsFile(), JSON.stringify(obj, null, 2), 'utf8') - 读取本地文件main.js:46
return !!dir && fs.existsSync(path.join(dir, 'package.json')) && - 读取本地文件main.js:47
(fs.existsSync(path.join(dir, 'apps', 'cli', 'lib', 'bin.js')) || fs.existsSync(path.join(dir, 'node_modules'))) - 发起网络请求main.js:82
const req = http.get(`http://127.0.0.1:${DEFAULT_PORT}/`, { timeout: 2000 }, (res) => { - 执行外部命令固定命令main.js:94
spawnSync('taskkill', ['/pid', String(pid), '/T', '/F'], { stdio: 'ignore', windowsHide: true }) - 执行外部命令来自配置/变量main.js:111
child = spawn(cmd, args, { - 读取本地文件main.js:189
const css = fs.readFileSync(path.join(SHELL_DIR, 'shell.css'), 'utf8') - 读取本地文件main.js:190
const js = fs.readFileSync(path.join(SHELL_DIR, 'shell.js'), 'utf8') - 写入本地文件main.js:273
fs.writeFileSync(outPath, info) - 读取本地文件main.js:293
return fs.readdirSync(dir) - 删除本地文件build-release.js:14
fs.rmSync(OUT, { recursive: true, force: true }) - 删除本地文件build-release.js:16
fs.rmSync(path.join(OUT, 'resources', 'default_app.asar'), { force: true }) - 删除本地文件build-release.js:19
fs.rmSync(STAGING, { recursive: true, force: true }) - 写入本地文件build-release.js:20
fs.mkdirSync(path.join(STAGING, 'shell'), { recursive: true }) - 写入本地文件build-release.js:22
fs.copyFileSync(path.join(APP_ROOT, f), path.join(STAGING, f)) - 读取本地文件build-release.js:33
console.log('app.asar written:', (fs.statSync(asarOut).size / 1048576).toFixed(1), 'MB') - 写入本地文件build-release.js:37
fs.renameSync(path.join(OUT, 'electron.exe'), exe) - 写入本地文件build-release.js:53
fs.copyFileSync(path.join(APP_ROOT, 'README.md'), path.join(OUT, 'README.md')) - 写入本地文件build-release.js:54
fs.copyFileSync(path.join(APP_ROOT, 'LICENSE'), path.join(OUT, 'LICENSE')) - 删除本地文件build-release.js:55
fs.rmSync(STAGING, { recursive: true, force: true }) - 读取本地文件probe/main-bgcheck.js:8
const css = fs.readFileSync(path.join(APP, 'shell', 'shell.css'), 'utf8') - 读取本地文件probe/main-bgcheck.js:9
const js = fs.readFileSync(path.join(APP, 'shell', 'shell.js'), 'utf8') - 读取本地文件probe/main-bgcheck.js:23
const data = fs.readFileSync(file) - 写入本地文件probe/main-bgcheck.js:79
fs.writeFileSync(path.join(__dirname, 'bg-out.json'), out) - 读取本地文件probe/main-collapse.js:8
const css = fs.readFileSync(path.join(APP, 'shell', 'shell.css'), 'utf8') - 读取本地文件probe/main-collapse.js:9
const js = fs.readFileSync(path.join(APP, 'shell', 'shell.js'), 'utf8') - 写入本地文件probe/main-collapse.js:11
fs.mkdirSync(OUT, { recursive: true }) - 写入本地文件probe/main-collapse.js:53
fs.writeFileSync(path.join(OUT, 'collapse.json'), out) - 读取本地文件probe/main-collapse2.js:8
const css = fs.readFileSync(path.join(APP, 'shell', 'shell.css'), 'utf8') - 读取本地文件probe/main-collapse2.js:9
const js = fs.readFileSync(path.join(APP, 'shell', 'shell.js'), 'utf8') - 写入本地文件probe/main-collapse2.js:45
fs.writeFileSync(path.join(__dirname, 'collapse-diag.json'), out) - 写入本地文件probe/main.js:9
fs.mkdirSync(OUT, { recursive: true }) - 写入本地文件probe/main.js:52
fs.writeFileSync(path.join(OUT, 'dom.json'), info) - 写入本地文件probe/main.js:54
fs.writeFileSync(path.join(OUT, 'screenshot.png'), img.toPNG()) - 读取本地文件probe/main10.js:8
const css = fs.readFileSync(path.join(APP, 'shell', 'shell.css'), 'utf8') - 读取本地文件probe/main10.js:9
const js = fs.readFileSync(path.join(APP, 'shell', 'shell.js'), 'utf8') - 读取本地文件probe/main11.js:8
const css = fs.readFileSync(path.join(APP, 'shell', 'shell.css'), 'utf8') - 读取本地文件probe/main11.js:9
const js = fs.readFileSync(path.join(APP, 'shell', 'shell.js'), 'utf8') - 读取本地文件probe/main12.js:8
const css = fs.readFileSync(path.join(APP, 'shell', 'shell.css'), 'utf8') - 读取本地文件probe/main12.js:9
const js = fs.readFileSync(path.join(APP, 'shell', 'shell.js'), 'utf8') - 写入本地文件probe/main12.js:21
fs.writeFileSync(path.join(__dirname, 'probe-out3', name + '.png'), img.toPNG()) - 写入本地文件probe/main2.js:8
fs.mkdirSync(OUT, { recursive: true }) - 写入本地文件probe/main2.js:91
fs.writeFileSync(path.join(OUT, 'dom.json'), info) - 写入本地文件probe/main3.js:8
fs.mkdirSync(OUT, { recursive: true }) - 写入本地文件probe/main3.js:51
fs.writeFileSync(path.join(OUT, 'surfaces.json'), info) - 读取本地文件probe/main5.js:8
const css = fs.readFileSync(path.join(APP, 'shell', 'shell.css'), 'utf8') - 读取本地文件probe/main6.js:8
const css = fs.readFileSync(path.join(APP, 'shell', 'shell.css'), 'utf8') - 读取本地文件probe/main6.js:9
const js = fs.readFileSync(path.join(APP, 'shell', 'shell.js'), 'utf8') - 读取本地文件probe/main7.js:8
const css = fs.readFileSync(path.join(APP, 'shell', 'shell.css'), 'utf8') - 读取本地文件probe/main8.js:8
const css = fs.readFileSync(path.join(APP, 'shell', 'shell.css'), 'utf8') - 读取本地文件probe/main8.js:9
const js = fs.readFileSync(path.join(APP, 'shell', 'shell.js'), 'utf8') - 读取本地文件probe/main9.js:8
const css = fs.readFileSync(path.join(APP, 'shell', 'shell.css'), 'utf8') - 读取本地文件probe/main9.js:9
const js = fs.readFileSync(path.join(APP, 'shell', 'shell.js'), 'utf8')
扫描于 2026/11/2(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 包装为桌面应用
- 双击即用
DeepSeek Harness 液态玻璃桌面外壳
README
由 DeepSeek 最新模型翻译生成DeepSeek Harness Desktop
为 DeepSeek Harness 打造的液态玻璃桌面外壳 · A liquid-glass desktop shell for DeepSeek Harness
本仓库是客户端源代码;打包好的成品在 Releases 页面提供下载。
📖 中文文档
这是什么
一款为 DeepSeek Harness 打造的桌面外壳。它的定位很简单:在 Harness 本身可用的前提下,把「在浏览器里用」包装成「双击即用的漂亮桌面应用」。
- 壳核分离:完全不修改 Harness 的任何文件,仅在独立窗口中启动、美化现有的 dsh web 服务
- 本仓库只包含外壳代码,不包含 Harness 内核,也不负责帮你安装 Harness
✨ 特性
- 🚀 一键启动:自动探测 / 拉起 dsh web 服务并解析端口,无需手动开 PowerShell
- 🔄 智能复用:已有 dsh web 在跑(默认 3080 端口)→ 直接复用;没有 → 自动启动新实例(--port 0 自动分配端口),关窗自动回收自己启动的服务
- 🖼️ 背景系统:6 张内置背景图(3 深 3 浅),可调透明度 / 明暗 / 背景模糊;支持自定义本地图片(持久记忆、重启恢复,并提示可关闭毛玻璃查看原图)
展开完整文档(README 剩余 1 节)
DeepSeek Harness Desktop 为 DeepSeek Harness 打造的液态玻璃桌面外壳 · A liquid-glass desktop shell for DeepSeek Harness 本仓库是客户端源代码;打包好的成品在 Releases 页面提供下载。 📖 中文文档 这是什么 一款为 DeepSeek Harness 打造的桌面外壳。它的定位很简单:在 Harness 本身可用的前提下,把「在浏览器里用」包装成「双击即用的漂亮桌面应用」。 - 壳核分离:完全不修改 Harness 的任何文件,仅在独立窗口中启动、美化现有的 dsh web 服务 - 本仓库只包含外壳代码,不包含 Harness 内核,也不负责帮你安装 Harness ✨ 特性 - 🚀 一键启动:自动探测 / 拉起 dsh web 服务并解析端口,无需手动开 PowerShell - 🔄 智能复用:已有 dsh web 在跑(默认 3080 端口)→ 直接复用;没有 → 自动启动新实例(--port 0 自动分配端口),关窗自动回收自己启动的服务 - 🖼️ 背景系统:6 张内置背景图(3 深 3 浅),可调透明度 / 明暗 / 背景模糊;支持自定义本地图片(持久记忆、重启恢复,并提示可关闭毛玻璃查看原图) - 🧊 液态玻璃:整窗圆角 + 帧级毛玻璃(Apple Liquid Glass 风格),侧栏 / 输入卡半透明磨砂、内高光边框 - 🪄 无边框沉浸界面:无标题栏黑条;最小化 / 最大化 / 关闭悬浮右上角、靠近自动浮现;按住页面顶部空白处即可拖动窗口 - 🐳 侧栏鲸鱼球:收起侧栏后化作左上角一颗玻璃球(DS 鲸鱼 logo),点击展开;展开为圆角卡片,保留原生收起 / 调宽 - 🎨 深色模式修色:代码块 / 内联代码改为半透明玻璃(不再突兀),点赞 / 复制 / 运行时间等辅助信息提亮 - ⚡ 性能模式:一键关闭全部模糊特效,老旧设备也流畅 - 💾 设置记忆:背景、透明度等偏好自动保存,重启不丢失 ⚠️ 前置条件(重要) 本客户端是 Harness 的美化外壳,本身不包含 Harness 内核。请先确认目标机器满足: 1. 已有一份可用的 DeepSeek Harness 源码(本客户端不会帮你下载 / 安装 Harness) 2. Harness 已安装依赖并完成构建: - 已执行 pnpm install(node_modules 完整) - 已执行 pnpm run build(前端 apps/web/dist 已生成) - 即:pnpm dsh web 在目标机器上能正常启动 3. 已安装 Node.js ≥ 22(客户端启动 Harness 时需要调用 node) 📦 下载与安装 前往本仓库的 Releases 页面,下载最新版 dsh-desktop-win32-x64.zip(约 100MB,含完整 Electron 运行时,无需对方安装 Node / Electron): 解压 → 双击 dsh-desktop.exe → 首次打开选 Harness 目录 → 开始使用 🔨 从源码构建 1. 安装依赖 npm install --no-audit --no-fund --cache .npm-cache 2. 开发模式启动 npm start 3. 打包发布(输出到 ..\release\dsh-desktop-win32-x64\) npm run pack 🚀 首次使用 1. 双击 dsh-desktop.exe 2. 若本机 3080 端口已有 Harness 在运行 → 直接连接,跳过后续步骤 3. 否则启动页会显示:「未找到 DeepSeek Harness,请选择安装目录后继续」+ 选择按钮 4. 选择 Harness 源码目录(含 package.json 与 apps/cli 的那个文件夹),校验通过后自动启动 5. 路径会被记住,之后每次打开自动使用;换目录可通过环境变量 DSH_HARNESS_PATH 指定,或删除 %APPDATA%\DeepSeek Harness Desktop\settings.json 后重新选择 ⚙️ 配置 - 外壳设置:右下角调色盘按钮打开「外观设置」面板 —— 背景图切换 / 自定义背景 / 透明度 / 明暗 / 背景模糊 / 毛玻璃面板 / 性能模式 / 恢复默认 - Harness 路径:首次选择后记录在 settings.json;环境变量 DSH_HARNESS_PATH 可强制指定 - 复用 vs 自启:关窗时只有本客户端启动的 Harness 服务会被回收;复用的已有服务不受影响 ❓ 常见问题 | 现象 | 处理 | | 启动页提示"启动失败" | 多为前置条件未满足:Harness 未 pnpm install / 未 pnpm run build,或 Node 版本过低 | | 启动页提示"所选目录不是有效的 Harness" | 选错了文件夹:应选择包含 package.json 与 apps\cli 的 Harness 根目录 | | 杀毒软件提示 | 无代码签名的 Electron 应用可能被误报,添加信任 / 白名单即可 | | 换一台机器使用 | 直接把整个 dsh-desktop-win32-x64 文件夹拷过去即可(对方机器需满足前置条件) | 📁 目录结构 dsh-desktop/ ├── main.js # 主进程:服务探测/启动/端口解析/窗口/IPC/资源协议 ├── preload.js # 桥接:向 harness 页面暴露最小权限 API ├── build-release.js # 手动打包脚本(asar + 图标) ├── shell/ │ ├── splash.html # 启动页(液态玻璃 + 进度 + 首次选目录引导) │ ├── shell.css # 注入式玻璃主题(变量覆盖/背景层/面板/动效) │ ├── shell.js # 注入式外壳逻辑(背景系统/面板识别/窗口拖拽/持久化) │ ├── backgrounds/ # 6 张内置背景图 │ └── assets/ # 应用图标 ├── gen-backgrounds.ps1 # 背景图生成脚本(可自定义增删) ├── gen-icon.ps1 # 图标生成脚本 └── probe/ # DOM 探测工具(升级 harness 后验证选择器用) 🔧 技术说明 - 外壳通过 webContents.insertCSS / executeJavaScript 注入到 Harness 页面,不触碰 Harness 源码 - 主题改造依赖 Harness 的语义 CSS 变量(--dsw-alias-bg-、--dsw-specific-),用 !important 覆盖为半透明玻璃色;主框架(.dsh-glass-frame)用 backdrop-filter + clip-path 实现整窗毛玻璃圆角 - 背景图通过自定义 dsh-shell:// 协议供给(打包后从 asar 内读取) - 毛玻璃仅作用于主框架 + 外壳控件;动画全部使用 transform/opacity,支持系统「减弱动态效果」,并提供性能模式一键关闭模糊 - Harness 升级导致界面类名变化时,可用 probe/ 下的探测脚本复测选择器 📄 许可证 MIT License © DeepSeek Harness Desktop contributors English Documentation 这是什么? 一个 DeepSeek Harness 桌面外壳,围绕一个想法打造:Harness 跑通之后,把它变成一个漂亮的、双击就能打开的桌面应用,而不是浏览器标签页。 - 外壳与内核分离 —— 它不改动 Harness 的任何一个文件,只在自己的窗口里启动并重新美化现有的 dsh web 服务。 - 本仓库只包含外壳源码,不含 Harness 内核,也不会替你安装 Harness。 ✨ 功能特性 - 🚀 一键启动 —— 自动检测或启动 dsh web 服务,并解析出端口;不用再在 PowerShell 里敲命令。 - 🔄 智能复用 —— 如果已有 dsh web 实例在运行(默认端口 3080),直接复用;否则新起一个(--port 0 自动挑空闲端口),关窗时再回收。 - 🖼️ 背景系统 —— 6 张内置壁纸(3 张深色 / 3 张浅色),可调透明度、亮度和模糊;也能选本地图片(重启后依然保留,并提示关闭毛玻璃即可看到原图)。 - 🧊 液态玻璃 —— 窗口圆角,框架级毛玻璃,苹果风;侧边栏和输入卡片半透明,带内高光。 - 🪄 沉浸式无边框界面 —— 没有标题栏;最小化/最大化/关闭按钮浮在右上角,悬停时出现;按住页面顶部任意空白区域即可拖动窗口。 - 🐳 侧边栏鲸鱼球 —— 收起侧边栏后,它会变成左上角一颗小玻璃球(DS 鲸鱼 logo);点击即可展开回圆角卡片。原生收起/调整大小行为保持不变。 - 🎨 深色模式打磨 —— 代码块和行内代码变成半透明玻璃,不再是突兀的方块;点赞/复制/运行时长等辅助信息提亮,更易读。 - ⚡ 性能模式 —— 一键关闭所有模糊效果,照顾老机器。 - 💾 偏好持久化 —— 背景、透明度等设置自动保存,重启后依然生效。 ⚠️ 前置条件 这个应用只是 Harness 的外壳,不打包 Harness 核心。先确认目标机器上有: 1. 一份能正常运行的 DeepSeek Harness 源码树(这个应用不会帮你下载或安装 Harness)。 2. Harness 已装好依赖并完成构建: - 已经跑过 pnpm install(node_modules 完整) - 已经跑过 pnpm run build(前端 apps/web/dist 已生成) - 换句话说,在那台机器上 pnpm dsh web 应该能正常启动。 3. 已安装 Node.js ≥ 22(应用会调用 node 来启动 Harness)。 📦 下载与安装 到本仓库的 Releases 页面下载最新的 dsh-desktop-win32-x64.zip(约 100MB,内含完整 Electron 运行时——接收方不需要装 Node 或 Electron): 解压 → 双击 dsh-desktop.exe → 首次启动时选择你的 Harness 文件夹 → 完成 🔨 从源码构建 1. Install dependencies npm install --no-audit --no-fund --cache .npm-cache 2. Run in development mode npm start 3. Package a release (outputs to ..\release\dsh-desktop-win32-x64\) npm run pack 🚀 首次启动 1. 双击 dsh-desktop.exe。 2. 如果已经有 Harness 实例在监听 3080 端口,它会直接连上——后面的步骤可以跳过。 3. 否则启动画面会显示:「Harness not found — please pick its folder to continue」,并带一个选择按钮。 4. 选择 Harness 源码目录(就是包含 package.json 和 apps/cli 的那个);应用会校验它并自动启动。 5. 路径会被记住,下次启动直接用。以后想改,可以设置 DSH_HARNESS_PATH 环境变量,或者删掉 %APPDATA%\DeepSeek Harness Desktop\settings.json 再重新选一次。 ⚙️ 配置 - 外观面板:右下角的调色板按钮打开它——切换壁纸 / 自定义背景 / 不透明度 / 亮度 / 模糊 / 毛玻璃开关 / 性能模式 / 重置。 - Harness 路径:首次选择后记在 settings.json 里;DSH_HARNESS_PATH 会覆盖它。 - 复用还是新起:关闭窗口只会回收这个应用自己启动的服务;复用的服务会继续运行。 ❓ 常见问题 | 现象 | 解决 | | 启动画面上提示「Startup failed」 | 通常是前置条件没满足:Harness 还没跑 pnpm install / pnpm run build,或者 Node 版本太旧。 | | 提示「The chosen folder is not a valid Harness」 | 文件夹选错了:要选包含 package.json 和 apps\cli 的 Harness 根目录。 | | 杀毒软件报警 | 未签名的 Electron 应用偶尔会被误报;加个例外 / 白名单即可。 | | 换到另一台机器 | 把整个 dsh-desktop-win32-x64 文件夹拷过去就行(那台机器同样要满足前置条件)。 | 📁 仓库结构 dsh-desktop/ ├── main.js # Main process: server probe/launch, port parsing, window, IPC, asset protocol ├── preload.js # Bridge: minimal-permission API exposed to the harness page ├── build-release.js # 手动打包脚本(asar + 图标) ├── shell/ │ ├── splash.html # 启动画面(液态玻璃 + 进度 + 首次运行的文件夹选择器) │ ├── shell.css # 注入的玻璃主题(变量覆盖 / 图层 / 面板 / 动效) │ ├── shell.js # 注入的外壳逻辑(背景 / 面板检测 / 窗口拖拽 / 持久化) │ ├── backgrounds/ # 6 张内置壁纸 │ └── assets/ # 应用图标 ├── gen-backgrounds.ps1 # 壁纸生成器(添加/删除背景) ├── gen-icon.ps1 # 图标生成器 └── probe/ # DOM 探测工具(Harness 升级后重新校验选择器) 🔧 技术说明 - 外壳通过 webContents.insertCSS / executeJavaScript 注入 Harness 页面 —— 绝不改动 Harness 源码。 - 主题依托 Harness 的语义化 CSS 变量(--dsw-alias-bg-、--dsw-specific-),用 !important 覆盖为半透明玻璃色调;主框架(.dsh-glass-frame)用 backdrop-filter + clip-path 做出圆角磨砂窗口。 - 壁纸通过自定义 dsh-shell:// 协议提供(打包后从 asar 读取)。 - 模糊只作用于主框架和外壳控件;所有动画只用 transform/opacity,遵循系统「减少动态效果」设置,也能通过性能模式彻底关闭。 - 如果 Harness 升级后类名有变,用 probe/ 下的工具重新校验选择器。 📄 许可证 MIT License © DeepSeek Harness Desktop contributors
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
165555979/dsh-desktop
把浏览器里的 dsh web 包装成双击即用的桌面应用
相关插件 · 开发 / 工程
隐私简历生成器reactive-resume/reactive-resume
Reactive Resume 已迁至 GitHub 上的…
★ 45,125已汉化MCP
71.7
AI 架构文档生成器sopaco/deepwiki-rs
🚀 Litho 已进化为 Terrain —— 给你的 AI 智能体一张会呼吸的代码库地图。
★ 3,157已汉化DSH
70.8
长时任务执行闭环AMAP-ML/LongHorizon-Harness
面向 Computer-Use Agent 的 Loop Engineering
★ 1,764已汉化DSH
70.5
AI 编程纪律方法包GanyuanRan/Aegis
让 AI 编程 agent 变得可信:少返工、更安全、说“完成”前先给证据。
★ 1,384已汉化DSH
69.6
多代理编排运行时Enderfga/claw-orchestrator
面向编程智能体的运行时。把 Claude Code、Codex、Antigravity、Grok…
★ 586已汉化MCP
69.4
记忆进化插件csyangwen/dsh-memory-evolve
dsh-memory-evolve 使用场景指南
★ 461已汉化DSH
67.9