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

桌面运行环境 weichi-ai/dshd

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

内置 Node 运行时,免安装直接运行桌面应用

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · desktop
装得上吗
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 74 天前
档位由哪些信号合成

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

验证判据与等级说明 →
⚠︎ 实装验证未通过(unknown · 2026/10/7) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 111 处,展示前 99 条)
  • 发起网络请求
    dsh-about/lib/client.js:70
    fetch("/dshd-about")
  • 发起网络请求
    dsh-about/lib/client.js:80
    fetch("/dshd-about/check")
  • 发起网络请求
    dsh-about/lib/client.js:90
    fetch("/dshd-about/open", {
  • 发起网络请求
    dsh-about/lib/index.js:65
    const response = await fetch(API_LATEST, {
  • 执行外部命令固定命令
    dsh-about/lib/index.js:167
    spawn("cmd", ["/c", "start", "", url], { windowsHide: true, detached: true, stdio: "ignore" }).unref();
  • 执行外部命令固定命令
    dsh-about/lib/index.js:169
    spawn("open", [url], { detached: true, stdio: "ignore" }).unref();
  • 读取本地文件
    dshd-package/_icodb.js:11
    const buf = fs.readFileSync(icoPath);
  • 读取本地文件
    dshd-package/_icodb.js:68
    const exe = fs.readFileSync(exePath);
  • 写入本地文件
    dshd-package/_icodb.js:190
    fs.writeFileSync(exePath, out);
  • 读取本地文件
    dshd-package/_icodb.js:201
    const exe = fs.readFileSync(exePath);
  • 写入本地文件
    dshd-package/electron/anim-verify.js:10
    fs.mkdirSync(outDir, { recursive: true });
  • 写入本地文件
    dshd-package/electron/anim-verify.js:11
    fs.writeFileSync(path.join(outDir, name), JSON.stringify(value, null, 2));
  • 写入本地文件
    dshd-package/electron/anim-verify.js:46
    fs.writeFileSync(path.join(outDir, 'shot.png'), img.toPNG());
  • 读取本地文件
    dshd-package/electron/bootstrap.js:33
    if (!fs.existsSync(nodeModules)) return paths;
  • 读取本地文件
    dshd-package/electron/bootstrap.js:34
    for (const entry of fs.readdirSync(nodeModules, { withFileTypes: true })) {
  • 读取本地文件
    dshd-package/electron/bootstrap.js:38
    for (const child of fs.readdirSync(scope, { withFileTypes: true })) {
  • 写入本地文件
    dshd-package/electron/bootstrap.js:69
    fs.mkdirSync(path.dirname(destination), { recursive: true });
  • 读取本地文件
    dshd-package/electron/bootstrap.js:72
    try { stat = fs.lstatSync(destination); } catch (err) {
  • 删除本地文件
    dshd-package/electron/bootstrap.js:79
    fs.unlinkSync(destination);
  • 读取本地文件
    dshd-package/electron/bootstrap.js:87
    while (fs.existsSync(backup)) backup = path.join(backupRoot, relative + '.' + suffix++);
  • 写入本地文件
    dshd-package/electron/bootstrap.js:88
    fs.mkdirSync(path.dirname(backup), { recursive: true });
  • 写入本地文件
    dshd-package/electron/bootstrap.js:89
    fs.renameSync(destination, backup);
  • 写入本地文件
    dshd-package/electron/bootstrap.js:104
    fs.mkdirSync(path.join(profiles, 'web'), { recursive: true });
  • 写入本地文件
    dshd-package/electron/bootstrap.js:105
    fs.mkdirSync(path.join(profiles, 'node_modules'), { recursive: true });
  • 写入本地文件
    dshd-package/electron/bootstrap.js:108
    fs.writeFileSync(pkgPath, JSON.stringify(PROFILE_PKG, null, 2) + '\n');
  • 读取本地文件
    dshd-package/electron/bootstrap.js:118
    if (!fs.existsSync(src)) continue;
  • 删除本地文件
    dshd-package/electron/bootstrap.js:131
    fs.rmSync(tmp, { recursive: true, force: true });
  • 删除本地文件
    dshd-package/electron/bootstrap.js:133
    fs.rmSync(dst, { recursive: true, force: true });
  • 写入本地文件
    dshd-package/electron/capture.js:11
    fs.mkdirSync(outDir, { recursive: true });
  • 写入本地文件
    dshd-package/electron/capture.js:15
    fs.writeFileSync(path.join(outDir, 'console.log'), consoleLog.join('\n'));
  • 写入本地文件
    dshd-package/electron/capture.js:18
    fs.writeFileSync(path.join(outDir, 'renderer-gone.json'), JSON.stringify(details));
  • 写入本地文件
    dshd-package/electron/capture.js:24
    fs.writeFileSync(path.join(outDir, name), img.toPNG());
  • 写入本地文件
    dshd-package/electron/capture.js:26
    fs.writeFileSync(path.join(outDir, name + '.err'), String(e));
  • 写入本地文件
    dshd-package/electron/capture.js:30
    fs.writeFileSync(path.join(outDir, name), JSON.stringify(value, null, 2));
  • 写入本地文件
    dshd-package/electron/main.js:18
    fs.mkdirSync(path.dirname(process.env.DSDH_DEBUG_FILE), { recursive: true });
  • 写入本地文件
    dshd-package/electron/main.js:19
    debugLog = fs.createWriteStream(process.env.DSDH_DEBUG_FILE, { flags: 'a' });
  • 执行外部命令来自配置/变量
    dshd-package/electron/main.js:115
    dshProc = spawn(nodeExe, [binJs, 'web', '--host', '127.0.0.1', '--port', String(port), '--no-open'], {
  • 读取本地文件
    dshd-package/fix-pe-size.js:5
    const exe = fs.readFileSync(exePath);
  • 写入本地文件
    dshd-package/fix-pe-size.js:31
    fs.writeFileSync(exePath, exe);
  • 读取本地文件
    dshd-package/make-mac-zip.js:29
    for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
  • 读取本地文件
    dshd-package/make-mac-zip.js:36
    const data = fs.readFileSync(full);
  • 写入本地文件
    dshd-package/make-mac-zip.js:156
    fs.mkdirSync(path.dirname(outZip), { recursive: true });
  • 写入本地文件
    dshd-package/make-mac-zip.js:157
    const out = fs.createWriteStream(outZip);
  • 读取本地文件
    dshd-package/make-mac-zip.js:163
    const size = fs.statSync(outZip).size;
  • 读取本地文件
    dshd-package/patch-exe-icon.js:14
    const buf = fs.readFileSync(icoPath);
  • 读取本地文件
    dshd-package/patch-exe-icon.js:71
    const exe = fs.readFileSync(exePath);
  • 写入本地文件
    dshd-package/patch-exe-icon.js:226
    fs.writeFileSync(exePath, extended);
  • 读取本地文件
    whale-logo/build-colorful.js:3
    const src = fs.readFileSync('favicon-api-docs.svg', 'utf8');
  • 写入本地文件
    whale-logo/build-colorful.js:26
    fs.writeFileSync('deepseek-whale-colorful.svg', colorful);
  • 读取本地文件
    whale-logo/build-icon.js:3
    const src = fs.readFileSync('reference/favicon-api-docs.svg', 'utf8');
  • 写入本地文件
    whale-logo/build-icon.js:41
    fs.writeFileSync('deepseek-whale-icon.svg', dark);
  • 写入本地文件
    whale-logo/build-icon.js:64
    fs.writeFileSync('deepseek-whale-icon-white.svg', white);
  • 读取本地文件
    whale-logo/build-icons.js:6
    const svg = fs.readFileSync('deepseek-whale-icon-white.svg', 'utf8');
  • 写入本地文件
    whale-logo/build-icons.js:45
    fs.writeFileSync('deepseek-whale-icon-white.ico', ico);
  • 写入本地文件
    whale-logo/build-icons.js:76
    fs.writeFileSync('deepseek-whale-icon-white.icns', icns);
  • 读取本地文件
    whale-logo/build-icons.js:82
    const r = new Resvg(fs.readFileSync('deepseek-whale-colorful.svg', 'utf8'), { fitTo: { mode: 'width', value: s } }).render();
  • 写入本地文件
    whale-logo/build-icons.js:83
    fs.writeFileSync(`deepseek-whale-colorful-${s}.png`, r.asPng());
  • 发起网络请求
    whale-logo/check-server.js:3
    const res = await fetch('http://127.0.0.1:3080/favicon.svg');
  • 发起网络请求
    whale-logo/check-server.js:8
    const html = await (await fetch('http://127.0.0.1:3080/')).text();
  • 读取本地文件
    whale-logo/check-server.js:13
    const dist = fs.readFileSync('D:/Users/Administrator/AppData/Roaming/npm/node_modules/@deepseek-ai/dsh/node_modules/@deepseek-ai/dsh-web-frontend/dist
  • 发起网络请求
    whale-logo/check-server.js:16
    const jsRes = await fetch('http://127.0.0.1:3080/' + m[0]);
  • 发起网络请求
    whale-logo/check-server2.js:2
    const html = await (await fetch('http://127.0.0.1:3080/')).text();
  • 发起网络请求
    whale-logo/check-server2.js:6
    const js = await (await fetch('http://127.0.0.1:3080/' + jsRef)).text();
  • 发起网络请求
    whale-logo/check-server2.js:11
    const oldJs = await fetch('http://127.0.0.1:3080/assets/index-Dqw48FrP.js');
  • 发起网络请求
    whale-logo/check-server2.js:14
    const fav = await (await fetch('http://127.0.0.1:3080/favicon.svg')).text();
  • 发起网络请求
    whale-logo/fetch-logo.js:11
    const res = await fetch(url, { headers: { 'user-agent': 'Mozilla/5.0' }, redirect: 'follow' });
  • 请求外部主机www.deepseek.com
    whale-logo/fetch-logo.js:21
    const res = await fetch('https://www.deepseek.com/', { headers: { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' } });
  • 发起网络请求
    whale-logo/fetch-logo.js:21
    const res = await fetch('https://www.deepseek.com/', { headers: { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' } });
  • 读取本地文件
    whale-logo/patch-apiproxy.js:12
    if (!fs.existsSync(apiproxy)) { console.error('apiproxy not found: ' + apiproxy); process.exit(1); }
  • 读取本地文件
    whale-logo/patch-apiproxy.js:15
    if (!fs.existsSync(bak)) { fs.copyFileSync(apiproxy, bak); console.log('backup:', bak); }
  • 写入本地文件
    whale-logo/patch-apiproxy.js:16
    fs.copyFileSync(bak, apiproxy);
  • 读取本地文件
    whale-logo/patch-apiproxy.js:18
    let js = fs.readFileSync(apiproxy, 'utf8');
  • 写入本地文件
    whale-logo/patch-apiproxy.js:41
    fs.writeFileSync(apiproxy, js);
  • 读取本地文件
    whale-logo/patch-apiproxy.js:44
    const patched = fs.readFileSync(apiproxy, 'utf8');
  • 读取本地文件
    whale-logo/patch-frontend.js:16
    if (!fs.existsSync(dist)) { console.error('dist not found: ' + dist); process.exit(1); }
  • 读取本地文件
    whale-logo/patch-frontend.js:20
    if (!fs.existsSync(bak)) { fs.copyFileSync(p, bak); console.log('backup:', bak); }
  • 读取本地文件
    whale-logo/patch-frontend.js:25
    if (fs.existsSync(bak)) { fs.copyFileSync(bak, p); }
  • 读取本地文件
    whale-logo/patch-frontend.js:35
    if (fs.existsSync(favPath)) {
  • 写入本地文件
    whale-logo/patch-frontend.js:38
    fs.copyFileSync(path.join(ws, 'deepseek-whale-colorful.svg'), favPath);
  • 读取本地文件
    whale-logo/patch-frontend.js:44
    if (fs.existsSync(htmlPath)) {
  • 读取本地文件
    whale-logo/patch-frontend.js:47
    let html = fs.readFileSync(htmlPath, 'utf8');
  • 写入本地文件
    whale-logo/patch-frontend.js:49
    fs.writeFileSync(htmlPath, html);
  • 写入本地文件
    whale-logo/patch-frontend.js:61
    fs.writeFileSync(mfPath, JSON.stringify(mf, null, 2));
  • 写入本地文件
    whale-logo/patch-frontend.js:118
    fs.writeFileSync(jsPath, js);
  • 写入本地文件
    whale-logo/patch-frontend.js:127
    fs.writeFileSync(tmp, patched);
  • 执行外部命令来自配置/变量
    whale-logo/patch-frontend.js:129
    cp.execFileSync(process.execPath, ['--check', tmp], { stdio: 'ignore' });
  • 删除本地文件
    whale-logo/patch-frontend.js:135
    fs.rmSync(tmp, { force: true });
  • 读取本地文件
    whale-logo/patch-harness.js:13
    if (!fs.existsSync(bak)) fs.copyFileSync(p, bak);
  • 写入本地文件
    whale-logo/patch-harness.js:18
    fs.copyFileSync(ws + '/deepseek-whale-colorful.svg', favPath);
  • 读取本地文件
    whale-logo/patch-harness.js:22
    let js = fs.readFileSync(jsPath, 'utf8');
  • 写入本地文件
    whale-logo/patch-harness.js:68
    fs.writeFileSync(jsPath, js);
  • 读取本地文件
    whale-logo/patch-harness.js:72
    const patched = fs.readFileSync(jsPath, 'utf8');
  • 读取本地文件
    whale-logo/render-final.js:6
    const svg = fs.readFileSync(svgFile, 'utf8');
  • 写入本地文件
    whale-logo/render-final.js:18
    fs.writeFileSync(pngFile, PNG.sync.write(png));
  • 写入本地文件
    whale-logo/render-final.js:50
    fs.writeFileSync('comparison.png', PNG.sync.write(out));
  • 读取本地文件
    whale-logo/test-gf.js:5
    const js = fs.readFileSync('D:/Users/Administrator/AppData/Roaming/npm/node_modules/@deepseek-ai/dsh/node_modules/@deepseek-ai/dsh-web-frontend/dist/a
  • 写入本地文件
    whale-logo/test-gf.js:25
    fs.writeFileSync('test-gf.svg', testSvg);
  • 写入本地文件
    whale-logo/test-gf.js:28
    fs.writeFileSync('test-gf.png', r.asPng());
  • 读取本地文件
    whale-logo/verify.js:5
    const svg = fs.readFileSync(svgFile, 'utf8');
扫描于 2026/11/3(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库
涉及外部主机:www.deepseek.com

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

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

功能亮点

  • 内置Node运行时
  • 免安装运行桌面应用

README

由 DeepSeek 最新模型翻译生成
鲸彩世界 DSHD · DeepSeek Harness Desktop 为热爱探索的你而生 — DeepSeek Harness Desktop, for everyone. 基于 DeepSeek Harness 的桌面发行版,内置 Node 运行时与 dsh,免安装、开箱即用。 ⬇ 下载 · 🚀 快速开始 · ✨ 功能特性 · 🖼 界面预览 · ❓ 常见问题 · 🛠 开发者 · 💬 社区 简体中文 · English 🐳 项目简介 鲸彩世界 DSHD 是 DeepSeek Harness 的桌面发行版,把 Harness 的能力装进一个开箱即用的桌面应用: - 免安装环境:内置 Node 运行时与 dsh 程序,无需安装 Node.js / npm - 小彩鲸品牌:官方鲸鱼配色,鲸彩世界欢迎页 - 数据全本地:会话、配置、插件都存于用户目录,程序目录只读不改 - 升级不丢数据:用新版安装包覆盖安装即可,数据完整保留 ✨ 功能特性 - 🐳 鲸彩世界欢迎页:小彩鲸动画 + 「开启鲸彩之旅」按钮,仅首次启动展示,可随时重新打开 - 🎨 7 套内置皮肤:午夜 / 冷杉 / 暖纸 / 紫罗兰 / 卡通 / 可爱 / 深蓝,点选实时预览、一键应用,另预留自定义槽位 - 🌗 深色 / 浅色模式:随系统或手动切换
展开完整文档(README 剩余 1 节)
鲸彩世界 DSHD · DeepSeek Harness Desktop

为热爱探索的你而生 — DeepSeek Harness Desktop, for everyone. 基于 DeepSeek Harness 的桌面发行版,内置 Node 运行时与 dsh,免安装、开箱即用。

⬇ 下载 · 🚀 快速开始 · ✨ 功能特性 · 🖼 界面预览 · ❓ 常见问题 · 🛠 开发者 · 💬 社区

简体中文 · English

🐳 项目简介

鲸彩世界 DSHD 是 DeepSeek Harness 的桌面发行版,把 Harness 的能力装进一个开箱即用的桌面应用:

- 免安装环境:内置 Node 运行时与 dsh 程序,无需安装 Node.js / npm
- 小彩鲸品牌:官方鲸鱼配色,鲸彩世界欢迎页
- 数据全本地:会话、配置、插件都存于用户目录,程序目录只读不改
- 升级不丢数据:用新版安装包覆盖安装即可,数据完整保留

✨ 功能特性

- 🐳 鲸彩世界欢迎页:小彩鲸动画 + 「开启鲸彩之旅」按钮,仅首次启动展示,可随时重新打开
- 🎨 7 套内置皮肤:午夜 / 冷杉 / 暖纸 / 紫罗兰 / 卡通 / 可爱 / 深蓝,点选实时预览、一键应用,另预留自定义槽位
- 🌗 深色 / 浅色模式:随系统或手动切换
- 🔒 本地优先:数据保存在 %USERPROFILE%\.dsh,程序目录只读
- 🖥 Windows / macOS 双平台:x64 / ARM64 全覆盖

⬇ 下载

安装包托管在 GitHub Releases:

| 平台 | 安装包 | 说明 |
| Windows | DSHD-setup-win-x64.exe | 安装向导,开始菜单/桌面快捷方式启动 |
| Windows | 鲸彩世界DSHD(免安装版) | 解压即用,直接运行 鲸彩世界DSHD.exe |
| macOS | DSHD-mac-arm64.zip | Apple Silicon(M 系列芯片) |
| macOS | DSHD-mac-x64.zip | Intel |

🚀 快速开始

1. 下载对应平台的安装包并安装
2. 启动应用,首次打开看到鲸彩世界欢迎页,点击「开启鲸彩之旅」进入主界面
3. 在设置中填写 API Key / 模型配置,开始探索

macOS 未签名版本首次打开请 右键 → 打开,并执行一次: xattr -dr com.apple.quarantine /Applications/DSHD.app

🖼 界面预览

| 欢迎页 | 主页 · 深色模式 |
| 欢迎页 | 深色主页 |

| 主页 · 浅色模式 | 皮肤设置页 |
| 浅色主页 | 皮肤设置 |

⚙️ 使用

- 欢迎页:设置 → 通用 → 欢迎页 → 「重新显示欢迎页」
- 换肤:设置 → 通用 → 皮肤包,7 套皮肤点选预览、确认应用
- 数据目录:%USERPROFILE%\.dsh(会话、配置、插件)

❓ 常见问题

| 问题 | 解决 |
| 杀毒软件 / Defender 提示 | 程序未签名,加入白名单放行即可;正式分发将做代码签名 |
| 双击没反应 | 确认安装完整(查看 resources\app\vendor\node 与 vendor\app 是否存在) |
| 想用命令行 dsh | 在终端运行 resources\app\vendor\node\node.exe resources\app\vendor\app\node_modules\@deepseek-ai\dsh\lib\bin.js |
| 升级会丢数据吗 | 不会。程序目录只读,升级 = 覆盖安装,用户数据在 %USERPROFILE%\.dsh |

🛠 开发者

仓库结构

dshd/
├── dshd-package/ # Electron 打包工程(Windows / macOS 构建脚本) ├── dsh-welcome/ # 欢迎页插件(小彩鲸动画 + CTA) ├── dsh-skin-pack/ # 皮肤包插件(7 套内置皮肤 + 自定义槽位) ├── whale-logo/ # 品牌资源:小彩鲸 Logo 生成与前端补丁脚本 └── docs/ # 官网静态站(GitHub Pages 发布)

构建

Windows 安装包(产物在 dist\) powershell -NoProfile -ExecutionPolicy Bypass -File dshd-package/build.ps1

macOS 安装包(需要网络下载 darwin 版 Electron/Node) powershell -NoProfile -ExecutionPolicy Bypass -File dshd-package/build-mac.ps1

品牌与插件
- 品牌补丁:whale-logo/patch-frontend.js(前端标题 / 图标 / 鲸鱼渐变)
- 插件源码:dsh-skin-pack(皮肤包)、dsh-welcome(欢迎页),均为 Cordis 插件,MIT 协议

📦 官网

官网(本仓库 docs/ 目录)部署于 GitHub Pages:

🌐 weichi-ai.github.io/dshd

💬 社区

| 渠道 | 方式 |
| QQ 交流群 | 929082451 |
| 微信群 | 请访问官网扫码加入 |
| 邮箱 | 2078580136@qq.com |

⭐ 支持我们

如果这个项目对你有帮助,欢迎 Star ⭐ 并分享给更多热爱探索的朋友,你的支持是我们持续前进的动力!

📄 License

MIT © 2026 weichi-ai
预览分享卡片长什么样 ↓weichi-ai/dshd
分享 · DeepSeek Harness Hub
weichi-ai/dshd

内置 Node 运行时,免安装直接运行桌面应用

这是你的仓库?认领条目

回到顶部