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

桌面壳 sidleo/dsh-desktop

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

一键启动 dsh web 界面,关闭自动停服

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么[目录]—
dsh 原生插件 · dev
暂无时间戳·判据 →
装得上吗[实装验证]—
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
数据截至 2026/10/09·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/05·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 73 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

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

验证判据与等级说明 →

可信度证据

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

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 29 处,展示前 24 条)
  • 读取本地文件
    main.js:20
    return JSON.parse(fs.readFileSync(DSH_CONFIG_FILE, 'utf8'));
  • 写入本地文件
    main.js:25
    fs.mkdirSync(DSH_CONFIG_DIR, { recursive: true });
  • 写入本地文件
    main.js:26
    fs.writeFileSync(DSH_CONFIG_FILE, JSON.stringify(cfg, null, 2));
  • 读取本地文件
    main.js:34
    if (!fs.existsSync(p)) return false;
  • 读取本地文件
    main.js:35
    const st = fs.statSync(p);
  • 执行外部命令来自配置/变量
    main.js:55
    const child = spawn(bin, ['--version'], {
  • 执行外部命令来自配置/变量
    main.js:95
    execFile(cmd, ['dsh'], { timeout: 3000 }, (err, stdout) => {
  • 执行外部命令固定命令
    main.js:106
    execFile('npm', ['root', '-g'], { timeout: 5000 }, (err, stdout) => {
  • 执行外部命令固定命令
    main.js:124
    execFile('pnpm', ['bin', '-g'], { timeout: 5000 }, (err, stdout) => {
  • 执行外部命令固定命令
    main.js:137
    execFile('mdfind', ['-name', 'dsh'], { timeout: 8000 }, (err, stdout) => {
  • 读取本地文件
    main.js:243
    try { if (fs.existsSync(c)) { extraDirs.push(path.dirname(c)); break; } } catch (e) {}
  • 读取本地文件
    main.js:265
    if (!fs.existsSync(zsh)) return null;
  • 写入本地文件
    main.js:306
    fs.mkdirSync(dir, { recursive: true });
  • 写入本地文件
    main.js:315
    fs.appendFileSync(path.join(LOG_DIR, 'dsh-desktop.log'),
  • 发起网络请求
    main.js:332
    const req = http.get({ host: HOST, port, timeout: 1500 }, (res) => {
  • 发起网络请求
    main.js:346
    http.get({ host: HOST, port, timeout: 2000 }, (res) => {
  • 执行外部命令固定命令
    main.js:361
    execFile('lsof', ['-nP', '-iTCP:' + port, '-sTCP:LISTEN', '-t'], (err, stdout) => {
  • 读取本地文件
    main.js:390
    const raw = fs.readFileSync(TASK_BOARD_LOCK, 'utf8');
  • 发起网络请求
    smoke-test.js:16
    const req = http.get({ host: '127.0.0.1', port, timeout: 1500 }, res => { res.resume(); resolve(true); });
  • 发起网络请求
    smoke-test.js:26
    http.get({ host: '127.0.0.1', port, timeout: 2000 }, res => { res.resume(); resolve(true); })
  • 执行外部命令固定命令
    smoke-test.js:35
    execFile('lsof', ['-nP', '-iTCP:' + port, '-sTCP:LISTEN', '-t'], (err, out) => {
  • 执行外部命令固定命令
    smoke-test.js:45
    const child = spawn('dsh', ['web', '--port', String(PORT), '--no-open'], {
  • 发起网络请求
    smoke-test.js:59
    http.get('http://127.0.0.1:' + PORT + '/', res => {
  • 执行外部命令固定命令
    smoke-test.js:73
    execFile('pkill', ['-TERM', '-f', 'dsh web --port ' + PORT], () => {
扫描于 2026/11/5(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库

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

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

功能亮点

  • 一键启动web服务
  • 关闭自动停服

DeepSeek Harness 桌面壳:打开应用=启动 dsh web 服务并加载界面,关闭应用=自动停止服务。Electron desktop shell for DeepSeek Harness (DSH)

README

由 DeepSeek 最新模型翻译生成
DeepSeek Harness 桌面应用 DeepSeek Harness 桌面应用(DeepSeek Harness / DSH 的 Electron 桌面壳) 一个极简的 Electron 桌面壳:打开应用 = 启动 dsh web 服务 + 内置浏览器加载其界面;关闭应用 = 自动停止 dsh web 服务。 英文版 | 核心优势 本应用不是重新实现 dsh 界面的第三方客户端,而是直接加载官方 dsh web 界面——因此官方 dsh web 支持的所有插件、配置、会话,本应用 100% 支持,与终端里的 dsh web 完全一致,没有任何功能阉割。 特性 - 启动即用:应用打开时自动在后台启动 dsh web(默认端口 4096,避开 dsh 默认 3080),等界面就绪后在内置窗口中展示 - 界面即应用:窗口就是 dsh web 的完整界面,无浏览器地址栏、标签页 - 关闭即停:关闭窗口/退出应用时,自动终止 dsh web 进程树,不留后台残留 - 复用现有数据:直接使用 ~/.dsh 配置、会话与插件(与终端里的 dsh web 是同一份数据) - 冲突处理:检测到另一个 dsh web 实例(task-board 单实例锁)或端口占用时,弹窗让用户选择(关闭旧实例 / 换端口 / 取消)
展开完整文档(README 剩余 1 节)
DeepSeek Harness 桌面应用

DeepSeek Harness 桌面应用(DeepSeek Harness / DSH 的 Electron 桌面壳)

一个极简的 Electron 桌面壳:打开应用 = 启动 dsh web 服务 + 内置浏览器加载其界面;关闭应用 = 自动停止 dsh web 服务。

英文版 |

核心优势

本应用不是重新实现 dsh 界面的第三方客户端,而是直接加载官方 dsh web 界面——因此官方 dsh web 支持的所有插件、配置、会话,本应用 100% 支持,与终端里的 dsh web 完全一致,没有任何功能阉割。

特性

- 启动即用:应用打开时自动在后台启动 dsh web(默认端口 4096,避开 dsh 默认 3080),等界面就绪后在内置窗口中展示
- 界面即应用:窗口就是 dsh web 的完整界面,无浏览器地址栏、标签页
- 关闭即停:关闭窗口/退出应用时,自动终止 dsh web 进程树,不留后台残留
- 复用现有数据:直接使用 ~/.dsh 配置、会话与插件(与终端里的 dsh web 是同一份数据)
- 冲突处理:检测到另一个 dsh web 实例(task-board 单实例锁)或端口占用时,弹窗让用户选择(关闭旧实例 / 换端口 / 取消)
- 流畅体验(v1.1.0):渲染进程关闭严格沙箱(sandbox: false),消除 macOS 上沙箱导致的界面卡顿;同时移除误伤 SPA 路由的导航拦截器

下载

最新的 macOS(Apple Silicon / arm64)安装包见右侧 Releases 页面:Download → dsh-desktop-1.3.0-arm64.dmg

使用

安装依赖
npm install

启动应用
npm start

配置(环境变量)

| 变量 | 默认值 | 说明 |
| DSH_APP_PORT | 4096 | dsh web 监听端口(避开默认 3080) |
| DSH_BIN | 自动探测 | dsh CLI 路径(显式指定时优先使用) |
| DSH_HOME | ~/.dsh | dsh 数据目录(保持默认即复用现有配置) |

自动发现 dsh(多级探测)

不同用户的 dsh 安装位置差异很大(npm 全局 / pnpm / nvm / 自定义目录,甚至不在 PATH 中)。应用启动时会按优先级自动探测:

1. 环境变量 DSH_BIN(用户显式指定)
2. 上次手动选择(记住的路径)
3. 常见安装路径:~/.local/bin、~/.npm-global/bin、~/.npm/bin、~/.yarn/bin、~/.volta/bin、/usr/local/bin、/opt/homebrew/bin 等
4. PATH(which dsh,覆盖 nvm/volta/asdf shims)
5. npm 全局目录(npm root -g)
6. pnpm 全局目录(pnpm bin -g)
7. Spotlight 搜索(macOS mdfind,兜底)

全部探测失败时:应用会弹窗让你手动选择 dsh 可执行文件,选择后路径会被记住(存入应用配置),下次启动自动使用。

提示:若 dsh 未安装,可先安装它(npm install -g @deepseek-ai/dsh)再重新打开应用。

使用独立数据目录(可选)

应用与现有 3080 实例完全隔离,各自独立配置/会话:

mkdir -p ~/.dsh-desktop-app
DSH_HOME=~/.dsh-desktop-app npm start

开发验证(smoke 模式)

无人值守验证完整链路(启动服务 → 开窗口 → 页面加载 → 自动退出清理),适合 CI/自检:

DSH_HOME=/tmp/dsh-test DSH_APP_PORT=5101 npx electron . --smoke

工作原理

1. 启动:主进程检测 task-board 锁(~/.dsh/task-board/ledger-v2.lock)——若有其他实例,弹窗询问是否关闭;然后 spawn('dsh', ['web', '--port', PORT, '--no-open'])
2. 等待就绪:轮询 http://127.0.0.1:PORT 直到返回 200,再创建 BrowserWindow 加载界面
3. 退出:before-quit 中 SIGTERM 终止 dsh 进程树(按端口定位,不误杀其他实例),然后退出应用

打包为 macOS 应用

使用 electron-builder 将应用打包为 .app / .dmg:

一步完成:打包 .app -> 完整 adhoc 签名 -> 生成 .dmg(推荐)
npm run dist

分步执行
npm run pack # 1. 生成 .app(dist/mac-arm64/)
npm run sign # 2. 对 .app 做完整 adhoc 签名(修复未签名导致的启动崩溃)
npm run dmg # 3. 用已签名 .app 生成 .dmg 安装包

为什么需要签名:本机无 Apple Developer ID 证书,electron-builder 默认跳过签名,导致产物 Info.plist 未绑定、资源未 seal,从 DMG 安装后 macOS 会因 quarantine + translocation 启动崩溃("Library not loaded: Electron Framework")。scripts/sign-app.js 用 adhoc 签名(codesign --force --deep --sign -)补全签名,安装后即可正常运行。

注意事项
- GUI 环境 PATH:从 Finder/Dock 双击启动时,应用 PATH 只有 /usr/bin:/bin:/usr/sbin:/sbin,不含 ~/.local/bin(dsh 和 node 所在)。应用会自动多级探测 dsh 位置(见上文「自动发现 dsh」),并在启动 dsh 时把 node 注入 PATH;若 dsh 装在特殊位置,可在首次启动时手动选择,或设 DSH_BIN 指向绝对路径
- 复用 ~/.dsh 时 task-board 是单实例锁:应用运行时,终端里的 dsh web 不能同时开(反之亦然)

目录结构

| 文件/目录 | 说明 |
| main.js | 主进程:服务生命周期管理(启动/就绪/停止)+ 窗口 |
| preload.js | 渲染进程桥(向页面暴露服务状态,预留) |
| smoke-test.js | 服务生命周期冒烟测试(不依赖 Electron GUI) |
| scripts/sign-app.js | adhoc 签名脚本 |
| build/icon.icns | 应用图标 |
| dist/ | 打包产物(.app / .dmg,不入库) |
| package.json | Electron + electron-builder 配置 |

License

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

一键启动 dsh web 界面,关闭自动停服

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