双击即用,免装 Node 启动本地服务
26.1/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/7 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Denszh/dsh-desktop该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:待复验
是什么
dsh 原生插件 · dev
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 74 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
🔴 安全扫描发现高危能力自动 · 静态分析源码
v2.7.0🔴 扫描:高危尚无人工评估
静态扫描发现安装期即执行代码,或命令参数由运行时变量拼接(参数来源无法静态判定,从严处理)。
命令参数由运行时变量拼接读写/删除本地文件发起外部网络请求
查看扫描证据(共 47 处,展示前 32 条)
- 读取本地文件src/main/index.js:44
if (fs.existsSync(p)) return fs.readFileSync(p, 'utf8').trim(); - 写入本地文件src/main/index.js:50
fs.writeFileSync(path.join(dshRuntimeDir(), '.version'), version); - 请求外部主机api.github.comsrc/main/index.js:62
https.get(`https://api.github.com/repos/${DSH_RELEASE_OWNER}/${DSH_RELEASE_REPO}/releases?per_page=100`, { - 发起网络请求src/main/index.js:62
https.get(`https://api.github.com/repos/${DSH_RELEASE_OWNER}/${DSH_RELEASE_REPO}/releases?per_page=100`, { - 读取本地文件src/main/index.js:93
return fs.existsSync(dshRuntimeBinPath()); - 读取本地文件src/main/index.js:103
if (fs.existsSync(c)) return c; - 读取本地文件src/main/index.js:118
return fs.existsSync(p) ? p : null; - 删除本地文件src/main/index.js:145
fs.rmSync(extractTmp, { recursive: true, force: true }); - 写入本地文件src/main/index.js:146
fs.mkdirSync(extractTmp, { recursive: true }); - 执行外部命令固定命令src/main/index.js:151
execFile('tar', ['-xzf', archivePath, '-C', extractTmp], (err) => { - 删除本地文件src/main/index.js:157
fs.rmSync(archivePath, { force: true }); - 删除本地文件src/main/index.js:159
fs.rmSync(runtimeDir, { recursive: true, force: true }); - 写入本地文件src/main/index.js:160
fs.mkdirSync(runtimeDir, { recursive: true }); - 读取本地文件src/main/index.js:162
const entries = fs.readdirSync(extractTmp); - 读取本地文件src/main/index.js:164
for (const entry of fs.readdirSync(root)) { - 写入本地文件src/main/index.js:165
fs.renameSync(path.join(root, entry), path.join(runtimeDir, entry)); - 删除本地文件src/main/index.js:167
fs.rmSync(extractTmp, { recursive: true, force: true }); - 写入本地文件src/main/index.js:171
if (process.platform !== 'win32') fs.chmodSync(bin, 0o755); - 执行外部命令来自配置/变量src/main/index.js:190
execFile(nodePath, ['--version'], { timeout: 3000 }, (err, stdout) => { - 写入本地文件src/main/index.js:273
fs.mkdirSync(path.dirname(STATE_FILE), { recursive: true }); - 删除本地文件src/main/index.js:281
try { fs.rmSync(STATE_FILE, { force: true }); } catch { } - 发起网络请求src/main/index.js:317
https.get(u, (res) => { - 删除本地文件src/main/index.js:337
file.on('error', (err) => { fs.rmSync(dest, { force: true }); reject(err); }); - 执行外部命令固定命令src/main/index.js:347
execFile('unzip', ['-o', '-q', zipPath, '-d', destDir], (err) => { - 执行外部命令来自配置/变量src/main/index.js:432
const child = spawn(cmd, args, { - 执行外部命令固定命令src/main/index.js:937
execFileSync('pgrep', ['-f', 'DshDesktop.app/Contents/MacOS'], { stdio: 'ignore' }); - 读取本地文件src/main/updater.js:20
if (fs.existsSync(cfgPath)) { - 读取本地文件src/main/updater.js:21
const cfg = JSON.parse(fs.readFileSync(cfgPath, 'utf8')); - 执行外部命令来自配置/变量test-dsh-process.js:28
const child = spawn(pnpm, DEFAULT_DSH_ARGS, { - 执行外部命令运行时拼接test-dsh-process.js:100
try { execSync(`lsof -iTCP:${port} -sTCP:LISTEN -n -P 2>/dev/null`); return true; } catch { return false; } - 执行外部命令运行时拼接test-dsh-process.js:106
try { return execSync(`ps aux | grep -E "${pat}" | grep -v grep | awk '{print $2}'`).toString().trim().split('\n').filter(Boolean); } catch { return [ - 执行外部命令运行时拼接test-dsh-process.js:117
try { execSync(`lsof -iTCP:${port} -sTCP:LISTEN -n -P 2>/dev/null`); } catch { exited = true; break; }
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库
涉及外部主机:api.github.com
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 免装Node启动服务
- 双击即用
- 零配置启动
DeepSeek Harness 桌面壳,零配置启动,无需预装 Node
README
由 DeepSeek 最新模型翻译生成dsh-desktop
在桌面上运行 DeepSeek Harness 的桌面壳 ——无需预装 Node.js,一键安装,双击即用。
简体中文 · English
功能
- ⚡️ 零配置启动:首次启动自动下载 Node 运行时与 Harness 核心,之后全部本地运行,无需预装任何环境
- 🔄 运行时分发:安装包不携带 dsh 依赖树;首次运行从 GitHub Releases 下载 dsh-runtime-<platform>-<arch>.zip,后续复用本地缓存
- 🪶 Node 运行时兜底:优先使用系统 Node 22+;若系统没有合适版本,自动下载独立 Node 运行时到本地
- 🔁 内核自愈:每次启动自动对比 GitHub Releases 最新 dsh 运行时,有新版本即自动升级;离线时保留本地继续运行
- 🔒 本地优先:dsh 服务运行在 127.0.0.1,会话与设置保存在本机
- 📌 托盘驻留:关闭窗口不退出,dsh 后台继续运行;托盘菜单可打开窗口、重启服务、退出
- 🛡️ 进程守护:安全回收 dsh 子进程(含强杀后残留的孤儿进程)
- 🔄 自动更新:通过 electron-updater 检查 GitHub Releases,新版本自动下载,重启时完成升级
快速开始
从 Releases 下载对应平台的安装包,安装后启动即可。
展开完整文档(README 剩余 1 节)
dsh-desktop 在桌面上运行 DeepSeek Harness 的桌面壳 ——无需预装 Node.js,一键安装,双击即用。 简体中文 · English 功能 - ⚡️ 零配置启动:首次启动自动下载 Node 运行时与 Harness 核心,之后全部本地运行,无需预装任何环境 - 🔄 运行时分发:安装包不携带 dsh 依赖树;首次运行从 GitHub Releases 下载 dsh-runtime-<platform>-<arch>.zip,后续复用本地缓存 - 🪶 Node 运行时兜底:优先使用系统 Node 22+;若系统没有合适版本,自动下载独立 Node 运行时到本地 - 🔁 内核自愈:每次启动自动对比 GitHub Releases 最新 dsh 运行时,有新版本即自动升级;离线时保留本地继续运行 - 🔒 本地优先:dsh 服务运行在 127.0.0.1,会话与设置保存在本机 - 📌 托盘驻留:关闭窗口不退出,dsh 后台继续运行;托盘菜单可打开窗口、重启服务、退出 - 🛡️ 进程守护:安全回收 dsh 子进程(含强杀后残留的孤儿进程) - 🔄 自动更新:通过 electron-updater 检查 GitHub Releases,新版本自动下载,重启时完成升级 快速开始 从 Releases 下载对应平台的安装包,安装后启动即可。 首次运行会下载 Node 运行时与 Harness 核心(约几百 MB),随后直接进入 http://127.0.0.1:<port> 的 Harness 界面。之后一切本地运行,无需网络。 要求:macOS 10.15+ / Windows 10+(64 位)· 首次启动需联网 🤔 不知道下载哪个? 每个版本的 Release 说明 里都有一份「我该下载哪个安装包」的通俗指引,照着选即可。 工作原理 ┌──────────────────────────────────────────────┐ │ Electron 壳 (BrowserWindow) │ │ loadURL(dsh web) → 显示 Harness 界面 │ │ 托盘菜单 / 自动更新 / 进程守护 │ └──────────────────────┬───────────────────────┘ │ spawn (node → dsh) ┌──────────────────────┴───────────────────────┐ │ Electron 主进程 │ │ ensureDshRuntime 下载/解压 dsh 运行时 │ │ ensureNodeRuntime 按需下载 Node 22 │ │ DshProcess 端口发现 + 生命周期 │ │ updater 自动更新检查 │ └──────┬───────────────────────────┬───────────┘ │ │ userData/dsh-runtime/ userData/node-runtime/ (预打包 dsh 依赖) (Node v22 运行时) └─────────────┬─────────────┘ ▼ node dsh/lib/bin.js --profile web --port 0 │ ▼ http://127.0.0.1:<port>/ ← dsh web UI 预打包的 Harness 运行时发布在 dsh-desktop Releases 的 runtime release 中,按平台/架构区分(dsh-runtime-<platform>-<arch>.zip)。 开发 环境 pnpm install # 安装依赖 pnpm start # 启动(开发模式) 常用命令 | 命令 | 说明 | | pnpm start | 开发模式启动(使用项目内 dsh) | | pnpm dist:mac | 打包 macOS(dmg/zip) | | pnpm build:dsh-runtime | 构建 dsh 运行时压缩包 | | pnpm release <ver> <notes> | 一键发布(签名 + 公证 + GitHub Release) | 环境变量 | 变量 | 默认 | 说明 | | DSH_SOURCE | 空 | 设为 repo 时使用本地源码模式(开发调试) | | DSH_REPO | ~/personal/deepseek-harness | 本地源码模式下的 dsh 仓库路径 | | DSH_PROFILE | web | dsh profile 名 | | DSH_NODE | 空 | 指定 Node.js 绝对路径(优先于自动探测) | | DSH_RUNTIME_VERSION | 0.1.0-rc.6 | 运行时下载的 dsh 版本 | | DSH_DISABLE_SYSTEM_NODE | 空 | 设为 1 时强制跳过系统 Node,用独立运行时 | 目录结构 src/main/index.js Electron 主进程:运行时下载/启动 dsh、端口发现、托盘、生命周期 src/main/updater.js App 自动更新(electron-updater 封装) src/preload/ contextBridge 安全桥 src/renderer/ 加载中/错误页(实际 UI 由 dsh web 提供) scripts/build-dsh-runtime.sh 构建运行时压缩包 scripts/release.sh 一键发布脚本 .github/workflows/release.yml GitHub Actions 发布流水线 技术要点 - 运行时分发:安装包不包含 dsh 依赖树;首次运行下载 dsh-runtime-<platform>-<arch>.zip 到 userData/dsh-runtime - 内核自愈:每次启动对比 GitHub Releases 最新 dsh 运行时版本,有新版本自动下载替换;离线/限流时保留本地继续运行 - Node 运行时兜底:优先使用系统 Node 22+;若没有,自动下载 node-v22.23.1-<platform>-<arch> 到 userData/node-runtime - 进程组管理:dsh 以独立进程组运行,停止时整棵进程树(node → dsh)一并回收 - 退出路径:托盘"退出"/Cmd+Q 时先回收 dsh 子进程再退出;强杀 Electron 时通过 state 文件记录进程组 PID,下次启动自动清理孤儿进程 - 自更新机制:打包版启动 30 秒后及此后每 6 小时自动检查更新 - CI 缓存:GitHub Actions 缓存 dsh-runtime 构建结果(~/.npm + .dsh-runtime-cache),大幅缩短 Windows 构建时间 License MIT
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Denszh/dsh-desktop
双击即用,免装 Node 启动本地服务
相关插件 · 开发 / 工程
隐私简历生成器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