双击安装即可开聊,免配置环境与命令行
31.2/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/23 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查未通过:缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add xiaoge200/dsh-desktop该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · desktop
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 44 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-desktop @ 0.2.0
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/12 04:18:32
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 136 处,展示前 43 条)
- 读取本地文件resources/installer/install-dsh.mjs:54
if (existsSync(p)) return p; - 执行外部命令来自配置/变量resources/installer/install-dsh.mjs:65
const res = spawnSync(process.execPath, [npmCli, ...args], { - 读取本地文件resources/installer/install-dsh.mjs:77
h.update(readFileSync(file)); - 读取本地文件resources/installer/install-dsh.mjs:83
if (!existsSync(file)) return null; - 读取本地文件resources/installer/install-dsh.mjs:85
return JSON.parse(readFileSync(file, "utf8")); - 写入本地文件resources/installer/install-dsh.mjs:92
writeFileSync(join(dir, INSTALLED_FILE), JSON.stringify(info, null, 2), "utf8"); - 发起网络请求resources/installer/install-dsh.mjs:101
fetch(registry, { method: "HEAD", signal: ac.signal, redirect: "follow" }) - 读取本地文件resources/installer/install-dsh.mjs:194
names = readdirSync(parent); - 删除本地文件递归resources/installer/install-dsh.mjs:202
if (statSync(p).mtimeMs < cutoff) rmSync(p, { recursive: true, force: true }); - 读取本地文件resources/installer/install-dsh.mjs:202
if (statSync(p).mtimeMs < cutoff) rmSync(p, { recursive: true, force: true }); - 写入本地文件resources/installer/install-dsh.mjs:258
mkdirSync(dir, { recursive: true }); - 写入本地文件resources/installer/install-dsh.mjs:259
writeFileSync(join(dir, "dsh-update-install.log"), `[${new Date().toISOString()}] ${summary}\n${text}\n`, "utf8"); - 删除本地文件递归resources/installer/install-dsh.mjs:275
rmSync(stage, { recursive: true, force: true }); - 写入本地文件resources/installer/install-dsh.mjs:277
mkdirSync(stage, { recursive: true }); - 删除本地文件递归resources/installer/install-dsh.mjs:281
rmSync(stage, { recursive: true, force: true }); - 删除本地文件递归resources/installer/install-dsh.mjs:287
rmSync(stage, { recursive: true, force: true }); - 执行外部命令来自配置/变量resources/installer/install-dsh.mjs:335
const res = spawnSync(process.execPath, ["-e", NATIVE_PROBE, dir], { encoding: "utf8", timeout: 60_000, windowsHide: true }); - 写入本地文件resources/installer/install-dsh.mjs:372
renameSync(from, to); - 删除本地文件递归resources/installer/install-dsh.mjs:405
rmSync(oldDir, { recursive: true, force: true }); - 写入本地文件resources/installer/install-dsh.mjs:429
mkdirSync(target, { recursive: true }); - 删除本地文件递归resources/installer/install-dsh.mjs:431
rmSync(stage, { recursive: true, force: true }); - 执行外部命令固定命令resources/installer/install-dsh.mjs:488
const r = spawnSync("robocopy", [src, dst, "/E", "/NFL", "/NDL", "/NJH", "/NJS", "/NP", "/R:1", "/W:1"], { - 执行外部命令固定命令resources/installer/install-dsh.mjs:495
const r = spawnSync("cp", ["-R", src + "/.", dst + "/"], { - 执行外部命令来自配置/变量resources/installer/install-dsh.mjs:585
const res = spawnSync(process.execPath, [bin, "--version"], { encoding: "utf8", timeout: 60_000, windowsHide: true }); - 删除本地文件递归resources/installer/install-dsh.test.mjs:32
rmSync(root, { recursive: true, force: true }); - 写入本地文件resources/installer/install-dsh.test.mjs:33
mkdirSync(root, { recursive: true }); - 写入本地文件resources/installer/install-dsh.test.mjs:38
mkdirSync(dir, { recursive: true }); - 写入本地文件resources/installer/install-dsh.test.mjs:39
writeFileSync(join(dir, "mark.txt"), text); - 执行外部命令来自配置/变量resources/installer/install-dsh.test.mjs:43
return spawnSync(process.execPath, [INSTALLER, ...args], { - 删除本地文件递归resources/installer/install-dsh.test.mjs:53
rmSync(src, { recursive: true, force: true }); - 删除本地文件递归resources/installer/install-dsh.test.mjs:54
rmSync(dst, { recursive: true, force: true }); - 写入本地文件resources/installer/install-dsh.test.mjs:55
mkdirSync(join(src, "sub"), { recursive: true }); - 写入本地文件resources/installer/install-dsh.test.mjs:56
writeFileSync(join(src, "a.txt"), "hello"); - 写入本地文件resources/installer/install-dsh.test.mjs:57
writeFileSync(join(src, "sub", "b.txt"), "world"); - 读取本地文件resources/installer/install-dsh.test.mjs:60
assert.equal(readFileSync(join(dst, "a.txt"), "utf8"), "hello"); - 读取本地文件resources/installer/install-dsh.test.mjs:61
assert.equal(readFileSync(join(dst, "sub", "b.txt"), "utf8"), "world"); - 删除本地文件递归resources/installer/install-dsh.test.mjs:63
rmSync(src, { recursive: true, force: true }); - 删除本地文件递归resources/installer/install-dsh.test.mjs:64
rmSync(dst, { recursive: true, force: true }); - 删除本地文件递归resources/installer/install-dsh.test.mjs:71
rmSync(baseline, { recursive: true, force: true }); - 读取本地文件resources/installer/install-dsh.test.mjs:89
assert.ok(existsSync(join(target, "node_modules", "@deepseek-ai", "dsh", "lib", "bin.js"))); - 读取本地文件resources/installer/install-dsh.test.mjs:90
assert.ok(existsSync(join(target, ".installed.json"))); - 读取本地文件resources/installer/install-dsh.test.mjs:91
const installed = JSON.parse(readFileSync(join(target, ".installed.json"), "utf8")); - 读取本地文件resources/installer/install-dsh.test.mjs:170
assert.ok(existsSync(join(target, "node_modules", "@deepseek-ai", "dsh", "lib", "bin.js")), "旧版 bin 恢复");
扫描于 2026/11/2(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 双击安装即用
- 免配置环境
- 免命令行
把 DeepSeek Harness(DSH)装进桌面的跨平台应用 —— 下载、双击、开聊。
README
由 DeepSeek 最新模型翻译生成🐳 DSH 工作台(DSH Desktop)
把 DeepSeek Harness(DSH)装进桌面的跨平台应用 —— 下载、双击、开聊。
version
platform
CI
PRs Welcome
📖 目录
- 这是什么?
- 为什么要做它?
- 功能一览
- 快速开始(新手教程)
- 常见问题(FAQ)
- 开发者指南(从源码构建)
- 项目结构
- 参与贡献
- 开源许可
这是什么?🤔
DSH(DeepSeek Harness)是一个运行在你本地电脑上的 AI 智能体工具。过去想用它,你得先装好 Node.js,再在命令行里敲一堆指令——对不熟悉编程的朋友来说,光是"装环境"这一步就够劝退了。
DSH 工作台把这一切打包解决掉了:
- 装好就能用,不需要装 Node.js、不需要碰命令行
- 首次启动自动初始化,之后秒开,没网也能用
- 有新版自动升级,失败了还会自动退回旧版,你什么都不用管
简单说:这是一个"零门槛"的 DSH 桌面版。
为什么要做它?
展开完整文档(README 剩余 1 节)
🐳 DSH 工作台(DSH Desktop) 把 DeepSeek Harness(DSH)装进桌面的跨平台应用 —— 下载、双击、开聊。 version platform CI PRs Welcome 📖 目录 - 这是什么? - 为什么要做它? - 功能一览 - 快速开始(新手教程) - 常见问题(FAQ) - 开发者指南(从源码构建) - 项目结构 - 参与贡献 - 开源许可 这是什么?🤔 DSH(DeepSeek Harness)是一个运行在你本地电脑上的 AI 智能体工具。过去想用它,你得先装好 Node.js,再在命令行里敲一堆指令——对不熟悉编程的朋友来说,光是"装环境"这一步就够劝退了。 DSH 工作台把这一切打包解决掉了: - 装好就能用,不需要装 Node.js、不需要碰命令行 - 首次启动自动初始化,之后秒开,没网也能用 - 有新版自动升级,失败了还会自动退回旧版,你什么都不用管 简单说:这是一个"零门槛"的 DSH 桌面版。 为什么要做它?💡 | 新手会遇到的问题 | 我们的解法 | | 要装 Node.js、配置环境,劝退小白 | 安装包内置 Node 运行时,双击即装 | | 首次安装依赖要等半小时 | 内置完整 DSH 依赖包,首启即用 | | 命令行操作看不懂 | 图形界面 + 全白话提示,技术细节自动折叠 | | 升级麻烦、容易装坏 | 后台自动更新,失败自动回滚,全程不打扰 | ✨ 功能一览 - 🖥️ 跨平台:Windows / macOS / Linux 都能装 - 📦 免环境:内置 Node 运行时,不依赖系统环境 - ⚡ 秒级启动:首次初始化后开箱即用,完全离线可用 - 🔄 自动更新:DSH 有新版本自动安装,网络不稳会自动切换镜像源 - 🪟 独立窗口:DSH 界面直接嵌入应用,不依赖系统浏览器 - 🧩 托盘常驻:关窗口最小化到托盘,随时一键唤回 - 🌐 中英双语:界面随系统语言自动切换 - 🛡️ 安全本地运行:服务只在本机运行,不对外网开放 - 💬 小白友好:所有提示都说人话,出错了也知道该怎么办 🚀 快速开始(新手教程) 完全没接触过的小伙伴,照下面 3 步走就行。 第 1 步:下载安装包 1. 打开本仓库的 Releases(发行版) 页面: 2. 选择最新版本,下载对应系统的安装包: - Windows:.msi / .exe(要求 Win10 及以上,无需管理员权限) - macOS:.dmg(Apple Silicon / arm64;要求 macOS 11 及以上。Intel 版暂不提供) - Linux:暂不提供(打包链路待修复) 3. 双击安装包,一路点「下一步」完成安装 第 2 步:启动 安装完成后,桌面会出现 DSH 工作台 的图标,双击打开。 - 首次启动会做一次性初始化,大约一两分钟(视电脑速度而定),进度页会实时显示状态 - 之后每次启动都是秒开 第 3 步:开始使用 界面加载完成后,就是 DSH 的工作台了,像普通聊天软件一样直接用就好。 日常使用小贴士: | 想做的事 | 怎么做 | | 最小化到托盘 | 直接点窗口右上角的「关闭」按钮 | | 再次打开 | 点系统托盘里的 🐳 图标 →「打开界面」 | | 开机自启 | 托盘菜单 →「设置」→ 打开「开机自启」 | | 关闭自动更新 | 托盘菜单 →「设置」→ 关闭「自动更新」 | | 彻底退出 | 托盘菜单 →「退出」 | ❓ 常见问题(FAQ) Q:需要安装 Node.js 吗? 不需要。Node 运行时已内置在安装包里,打开就能用。 Q:我的数据存在哪里? 存在你电脑的用户目录下(Windows 为 %APPDATA%\com.dsh.desktop)。卸载应用时数据默认保留,重装不丢。 Q:怎么卸载? Windows 在「设置 → 应用」里找到 DSH 工作台卸载即可,无需管理员权限。卸载只删除程序本体,你的数据会保留。 Q:提示端口被占用怎么办? 不用管。端口被占用时应用会自动换一个空闲端口,对你完全无感。 Q:DSH 更新失败会怎样? 不会坏。更新前会自动备份旧版本,新版本装不上会自动回滚,下次启动再重试,全程不打扰你。 Q:杀毒软件拦截 / 误报怎么办? 如果被杀毒软件拦截,请把安装包或安装目录加入信任白名单后重新安装;仍不行的话,欢迎到 Issue 区反馈给我们。 Q:打开后界面是英文/中文,能切换吗? 界面语言跟随系统语言自动切换(中英双语),无需手动设置。 Q:网页里的「插件市场」提示要配置 pnpm(找不到 pnpm / 没有权限 / 可执行文件已存在)? 0.1.8 起桌面端已自带 pnpm,插件市场直接用内置的,不需要系统里装。若你在 0.1.7 及更早版本遇到这条提示,按提示在终端执行一次即可(装好后重启应用): npm i -g pnpm --force # Windows 需要用管理员身份运行终端 brew install pnpm # macOS(Homebrew) 装不上也没关系——设置窗口「插件」页里的市场走内置 npm,不受影响。 🛠️ 开发者指南(从源码构建) 想自己编译、二次开发或贡献代码的看这里;普通用户直接跳过本节。 前置要求:Rust 1.77+、Node 18+,以及各平台的 Tauri 系统依赖。 1. 安装依赖 npm install 2. 开发模式运行(带热更新) npm run tauri dev 3. 打包安装包 npm run tauri build 注意:npm install 依赖 npm 脚本执行(@tauri-apps/cli、esbuild 需要 postinstall)。若你的环境开启了 npm allow-scripts 策略,需在 .npmrc 的 allow-scripts 中放行它们。 🗂️ 项目结构(简版) dsh-desktop/ ├─ src/ # 前端界面(启动进度页、设置页) ├─ src-tauri/ # 桌面壳(Rust / Tauri) ├─ resources/ # 内置运行时资源(构建期注入) ├─ scripts/ # 构建脚本 ├─ docs/ # 发布手册与实现文档 └─ package.json 📚 更多文档 - 发布手册 docs/RELEASE.md —— 如何发布新版本 - 实现记录 docs/IMPLEMENTATION.md —— 开发中的踩坑记录 - 更新日志 CHANGELOG.md 🤝 参与贡献 欢迎任何形式的贡献!你可以: - 🐛 提 Issue:报告 bug、提出新功能建议 - ✨ 提 PR:修 bug、加功能、改进文档 - 💬 在讨论区分享使用心得 给本项目点个 ⭐,也是对我们最大的鼓励! 📄 开源许可 本项目基于 Apache License 2.0 开源,详见 LICENSE。 本项目是 DSH(DeepSeek Harness)的桌面封装,与 DeepSeek 官方无隶属关系。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
xiaoge200/dsh-desktop
双击安装即可开聊,免配置环境与命令行
相关插件 · 桌面端
Codex 任务面板chuspeeism/dashi-taskboard
现代化可灵活嵌入的任务面板,支持 Codex、DeepSeek Harness
★ 3,409已汉化DSH
71.7
多智能体自进化开发平台Prism-Shadow/penguin-harness
统一、稳定的 Agent 自进化框架全自动优化:任意模型 · 任意算法 · 任意 Benchmark
★ 3,111已汉化DSH
71.1
桌面宠物PC2005-cloud/dsh-pet
DSH 桌面宠物:一行命令装好即用的透明动画小桌宠,支持多开、大小位置随心配置;还内置 DIY 素材链,能用 AI…
★ 5,341已汉化DSH
71
多端 Agent 工作台GCWing/OpenBitFun
OpenBitFun 是一个高度可定制的开源 Agent 工作台,让任务按你的方式持续推进。
★ 3,449已汉化DSH
70.8
DSH Desktopanywhere-labs/dsh-desktop
为 DeepSeek Harness DSH 插件生态打造的现代化桌面端解决方案。万物皆「插件」,桌面本身也是「插件」。
★ 34,532已汉化DSH
70.7
桌面宠物伴侣OpenPetsHQ/openpets
桌面伴侣平台,带宠物、插件,还能选配本地智能体集成。
★ 1,353已汉化DSH
70.2