熟悉的 DeepSeek Harness,更顺手的 Windows 桌面体验。
40.9/100
综合分
19
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/27 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查未通过:要求 dsh 0.1.5-rc.1,而最新版为 0.2.1-rc.5;仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add chyra-moon/deepseek-harness-desktop该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · market
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 7 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(dependency_conflict · 2026/9/28) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装要求 dsh 0.1.5-rc.1,而最新版为 0.2.1-rc.5;仓库 package.json 标记 private,未发布到 npm,需从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包deepseek-harness-desktop @ 0.4.1
✓Node 引擎未声明 engines.node
✗dsh CLI 依赖要求 0.1.5-rc.1 · 最新 0.2.1-rc.5 不兼容
✓入口文件main/exports/bin 已声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/2 17:42:00
🔴 安全扫描发现高危能力自动 · 静态分析源码
v2.7.0🔴 扫描:高危尚无人工评估
静态扫描发现安装期即执行代码,或命令参数由运行时变量拼接(参数来源无法静态判定,从严处理)。
安装时即执行脚本命令参数由运行时变量拼接读写/删除本地文件发起外部网络请求
查看扫描证据(共 53 处,展示前 53 条)
- 写入本地文件src/main.js:78
fs.appendFileSync( - 读取本地文件src/main.js:93
const text = fs.readFileSync(settingsFile(), "utf8").replace(/^ FEFF/, ""); - 写入本地文件src/main.js:107
fs.mkdirSync(path.dirname(settingsFile()), { recursive: true }); - 写入本地文件src/main.js:108
fs.writeFileSync(settingsFile(), JSON.stringify(settings, null, 2)); - 读取本地文件src/main.js:119
if (fs.existsSync(p)) return p; - 发起网络请求src/main.js:131
const req = http.get(u, { headers: cookie ? { cookie } : {} }, (res) => { - 读取本地文件src/main.js:192
for (const p of candidates) if (fs.existsSync(p)) return p; - 执行外部命令固定命令src/main.js:216
child = spawn("cmd.exe", [ - 执行外部命令来自配置/变量src/main.js:228
child = spawn(process.execPath, [bin, "web", "--host", HOST, "--port", String(port), "--no-open"], { - 执行外部命令固定命令src/main.js:332
spawnSync("taskkill", ["/pid", String(child.pid), "/T", "/F"], { - 读取本地文件src/main.js:418
const b = JSON.parse(fs.readFileSync(boundsFile(), "utf8")); - 写入本地文件src/main.js:425
try { fs.writeFileSync(boundsFile(), JSON.stringify(mainWindow.getBounds())); } catch { } - 写入本地文件src/main.js:546
fs.writeFileSync( - 写入本地文件src/main.js:635
fs.writeFileSync( - 读取本地文件scripts/patch-dsh.js:45
if (!fs.existsSync(TARGET)) { - 读取本地文件scripts/patch-dsh.js:49
const src = fs.readFileSync(TARGET, "utf8"); - 写入本地文件scripts/patch-dsh.js:64
fs.writeFileSync(TARGET, patched, "utf8"); - 读取本地文件src/updater.js:25
if (fs.existsSync(f)) { - 读取本地文件src/updater.js:26
const v = fs.readFileSync(f, "utf8").trim(); - 读取本地文件scripts/ensure-icon.js:23
const missing = needs.filter((p) => !fs.existsSync(p)); - 执行外部命令固定命令scripts/ensure-icon.js:31
execSync("electron scripts/make-icon.js", { - 读取本地文件scripts/feed-server.js:32
fs.stat(file, (err, st) => { - 读取本地文件scripts/feed-server.js:51
fs.createReadStream(file, { start, end }).pipe(res); - 读取本地文件scripts/feed-server.js:57
fs.createReadStream(file).pipe(res); - 读取本地文件scripts/gen-whale-path.js:25
const svg = fs.readFileSync(src, "utf8"); - 写入本地文件scripts/gen-whale-path.js:45
fs.writeFileSync(out, JSON.stringify({ body, belly, eye, spout }, null, 2) + "\n"); - 读取本地文件scripts/make-icon.js:27
return fs.existsSync(alt) ? alt : null; - 读取本地文件scripts/make-icon.js:60
let svg = fs.readFileSync(src, "utf8"); - 写入本地文件scripts/make-icon.js:70
fs.mkdirSync(OUT_DIR, { recursive: true }); - 写入本地文件scripts/make-icon.js:71
fs.writeFileSync(path.join(OUT_DIR, "icon.png"), img.resize({ width: 512, height: 512 }).toPNG()); - 写入本地文件scripts/make-icon.js:72
fs.writeFileSync(path.join(OUT_DIR, "icon-256.png"), img.resize({ width: 256, height: 256 }).toPNG()); - 写入本地文件scripts/make-icon.js:73
fs.writeFileSync(path.join(OUT_DIR, "tray.png"), img.resize({ width: 32, height: 32 }).toPNG()); - 写入本地文件scripts/make-icon.js:74
fs.writeFileSync(path.join(OUT_DIR, "tray@2x.png"), img.resize({ width: 64, height: 64 }).toPNG()); - 写入本地文件scripts/preview-status.js:15
fs.writeFileSync(out, buildStatusHtml("正在启动服务器…", "首次启动或复用外部服务器时可能需要几秒到几十秒。")); - 执行外部命令运行时拼接scripts/preview-status.js:21
execSync(`start "" "${out}"`, { shell: "cmd.exe" }); - 读取本地文件scripts/prune-node-modules.js:30
if (!fs.existsSync(root)) { - 读取本地文件scripts/prune-node-modules.js:51
entries = fs.readdirSync(dir, { withFileTypes: true }); - 删除本地文件scripts/prune-node-modules.js:60
fs.rmSync(full, { recursive: true, force: true }); - 删除本地文件scripts/prune-node-modules.js:70
fs.unlinkSync(full); - 读取本地文件scripts/scan-deps-bounded.js:13
try { entries = fs.readdirSync(dir, { withFileTypes: true }); } catch { return; } - 读取本地文件scripts/scan-deps-bounded.js:29
if (fs.existsSync(path.join(dir, "node_modules", name))) return true; - 读取本地文件scripts/scan-deps-bounded.js:36
if (path.basename(root) === "node_modules" && fs.existsSync(path.join(root, name))) return true; - 读取本地文件scripts/scan-deps-bounded.js:43
try { j = JSON.parse(fs.readFileSync(pkgJsonPath, "utf8")); } catch { continue; } - 读取本地文件scripts/update-dsh.js:28
const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf8")); - 执行外部命令来自配置/变量scripts/update-dsh.js:35
execSync(cmd, { cwd: root, stdio: "inherit" }); - 执行外部命令运行时拼接scripts/update-dsh.js:59
const tags = JSON.parse(execSync(`npm view ${name} dist-tags --json`, { - 执行外部命令运行时拼接scripts/update-dsh.js:67
const list = JSON.parse(execSync(`npm view ${name} versions --json`, { - 写入本地文件scripts/update-dsh.js:122
fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + "\n"); - 读取本地文件scripts/verify-package.js:20
const VERSION = JSON.parse(fs.readFileSync(path.join(ROOT, "package.json"), "utf8")).version; - 读取本地文件scripts/verify-package.js:56
const ok = fs.existsSync(p); - 读取本地文件scripts/verify-package.js:63
const workerSrc = fs.existsSync(workerPath) ? fs.readFileSync(workerPath, "utf8") : ""; - 读取本地文件scripts/verify-package.js:71
const ok = fs.existsSync(p); - 读取本地文件scripts/verify-package.js:72
const size = ok ? `(${(fs.statSync(p).size / 1048576).toFixed(1)}MB)` : "";
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/cordis-plugin-group@deepseek-ai/cordis-plugin-hmr@deepseek-ai/cordis-plugin-include@deepseek-ai/cordis-plugin-loader@deepseek-ai/dsh@deepseek-ai/dsh-agent@deepseek-ai/dsh-agent-default-model@deepseek-ai/dsh-agent-presets@deepseek-ai/dsh-anonymous-user-id@deepseek-ai/dsh-api-gateway@deepseek-ai/dsh-api-remotes给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- Windows桌面外壳
DeepSeek Harness 桌面外壳:把官方 Web UI 原样搬成 Windows 桌面应用(社区项目)
README
由 DeepSeek 最新模型翻译生成DeepSeek Harness Desktop
熟悉的 DeepSeek Harness,更顺手的 Windows 桌面体验。
官方 Web 界面 · 内置本地服务 · 托盘常驻 · 自动恢复
下载最新版 → · 快速开始 · 问题反馈 ·
项目介绍
DeepSeek Harness Desktop 是 DeepSeek Harness 的 Windows 桌面适配版。项目使用 Electron 加载官方 Web 前端,把本地服务的启动、连接与恢复整合进桌面应用,让你从桌面直接进入 Harness 工作区。
安装包包含运行时与官方 dsh 服务,日常启动无需另行安装 Node.js 或输入命令。桌面适配层提供窗口管理、托盘驻留和连接恢复等能力;Harness 的核心功能与工作流程由内置的官方 dsh 提供。
本项目由社区维护,非 DeepSeek 官方客户端。DeepSeek Harness、@deepseek-ai/* 软件包及官方前端的版权归各自权利人所有。
桌面版带来了什么
| 能力 | 使用体验 |
| 官方界面 | 加载官方 Web 前端,延续 Harness 的工作区与会话操作方式。 |
| 服务自动管理 | 启动时自动连接或拉起本地 dsh 服务,无需单独维护终端窗口。
展开完整文档(README 剩余 1 节)
DeepSeek Harness Desktop 熟悉的 DeepSeek Harness,更顺手的 Windows 桌面体验。 官方 Web 界面 · 内置本地服务 · 托盘常驻 · 自动恢复 下载最新版 → · 快速开始 · 问题反馈 · 项目介绍 DeepSeek Harness Desktop 是 DeepSeek Harness 的 Windows 桌面适配版。项目使用 Electron 加载官方 Web 前端,把本地服务的启动、连接与恢复整合进桌面应用,让你从桌面直接进入 Harness 工作区。 安装包包含运行时与官方 dsh 服务,日常启动无需另行安装 Node.js 或输入命令。桌面适配层提供窗口管理、托盘驻留和连接恢复等能力;Harness 的核心功能与工作流程由内置的官方 dsh 提供。 本项目由社区维护,非 DeepSeek 官方客户端。DeepSeek Harness、@deepseek-ai/* 软件包及官方前端的版权归各自权利人所有。 桌面版带来了什么 | 能力 | 使用体验 | | 官方界面 | 加载官方 Web 前端,延续 Harness 的工作区与会话操作方式。 | | 服务自动管理 | 启动时自动连接或拉起本地 dsh 服务,无需单独维护终端窗口。 | | 已有服务复用 | 默认探测本机 3080 端口;识别到 dsh 服务后直接连接,可与浏览器使用同一实例。 | | 连接异常恢复 | 定期检查服务状态,检测到异常后尝试恢复服务并重新加载页面。 | | 桌面常驻 | 支持托盘显示与隐藏、窗口位置和尺寸记忆,以及单实例运行。 | | 清晰的启动状态 | 鲸鱼光点动画搭配状态提示,展示服务启动与恢复过程。 | 下载与安装 获取最新版本 → 面向 Windows x64。进入发布页面,查看版本说明,并在 Assets 中选择适合你的文件: | 发行形式 | 文件名特征 | 适合场景 | | 安装版 · 推荐 | DeepSeek.Harness-<版本>-x64.exe | 日常使用,可选择安装目录,并创建桌面与开始菜单快捷方式。 | | 解压版 | DeepSeek.Harness-<版本>-win32-x64.zip | 希望直接管理应用文件;完整解压后运行其中的程序。 | | 单文件便携版 | DeepSeek.Harness-<版本>-portable-x64.exe | 无需安装;启动时需要解包,可能比安装版等待更久。 | 文件名以发布页面实际附件为准。下载入口不绑定具体版本,后续更新可继续通过同一链接获取;预发布版本也请在发布列表中查看。 快速开始 1. 下载并启动:安装应用,或将 ZIP 完整解压后运行 DeepSeek Harness.exe。 2. 等待服务就绪:应用自动启动内置服务;若默认端口已有可识别的 dsh 服务,则直接复用。 3. 进入工作区:在 Harness 界面中完成所需配置,选择工作区并开始使用。模型连接与凭据以官方界面的配置要求为准。 关闭窗口后,应用默认保留在系统托盘。点击托盘图标可恢复窗口;要完全关闭应用,请在托盘菜单中选择 退出。 常用快捷键 | 快捷键 | 操作 | | Ctrl + R / F5 | 重新加载当前页面 | | Ctrl + Shift + O | 在系统浏览器中打开当前服务 | | Ctrl + Shift + I | 打开或关闭开发者工具 | 使用说明 与浏览器版一起使用 应用默认检查 127.0.0.1:3080,识别到已运行的 dsh 服务后会直接连接。同一服务实例下,桌面端和浏览器端访问的是同一套会话数据。 若该端口被其他程序占用,应用会尝试使用空闲端口启动内置服务。可通过托盘菜单中的 关于 查看当前服务地址和运行模式。 关闭托盘驻留与选择工作区 完全退出应用后,在应用数据目录的 settings.json 中将 closeToTray 改为 false,下次启动后关闭窗口即可退出。修改时保留文件中的其他配置项。 工作区默认使用应用内浏览式目录选择器,改善远程桌面及受控会话环境下的兼容性。当前版本启动时会把历史 directoryPicker: "native" 配置迁移为 "browse"。 版本更新 普通用户可随时从 Releases 页面 获取更新,具体变化以各版本的发布说明为准。 项目也提供可配置的自动更新机制:打包版通过环境变量 DSH_UPDATE_URL 或应用数据目录中的 update-url.txt 读取更新源。未配置更新源时跳过自动更新;配置有效更新源后,启动时检查、下载更新,下载完成后启动安装与重启流程。 更新源需要提供 electron-updater Generic Provider 所需的更新清单与安装文件,不能直接填入 GitHub Releases 页面地址。 升级到 0.1.5 时的会话数据变化 官方 dsh 0.1.5 起将会话日志格式升级到 V3:应用打开旧会话时会自动迁移,生成新版日志文件并保留原文件(同目录下 session.v3.jsonl.zstd 与 session.jsonl.zstd 并存)。 需要注意:升级后的新内容只写入 V3 文件,更早版本的应用无法读取它。因此从 0.1.5 回退到旧版本时,旧历史仍可读取,但升级之后产生的对话不会显示。 建议:跨大版本升级前先备份应用数据目录下的 sessions 文件夹(例如 %USERPROFILE%\.dsh\sessions)。 启动异常与问题反馈 服务恢复需要一定时间,实际耗时取决于本机环境与服务启动情况。若持续无法进入界面,可先通过托盘 关于 查看服务信息,再通过 Issues 反馈。 建议附上应用版本、Windows 版本、使用的发行形式和复现步骤;如有错误信息,可一并提供相关片段。 开发与构建 从源码运行、验证与打包 准备 Windows x64 与 Node.js / npm 环境,在项目目录执行: npm install npm run icon npm start 常用维护命令: | 命令 | 用途 | | npm run smoke | 运行应用启动冒烟检查 | | npm run dist | 构建安装版、解压版与便携版,并校验打包完整性 | | npm run verify | 单独校验已生成的应用包 | | npm run update:dsh | 升级官方 dsh 并重新构建发行包 | | npm run preview -- --open | 在浏览器中预览启动状态页 | 构建产物位于 release/。当前源码中的桌面版本与内置 dsh 版本均为 0.1.5-rc.1;后续以 package.json 和发布说明为准。 致谢与许可 感谢 DeepSeek 及 DeepSeek Harness 贡献者提供的开源基础。 本项目以 MIT License 开源。上游软件包与其他依赖遵循各自的许可证。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
chyra-moon/deepseek-harness-desktop
熟悉的 DeepSeek Harness,更顺手的 Windows 桌面体验。
相关插件 · 市场 / 管理
插件精选列表awesome-dsh-plugin/awesome-dsh-plugin
DeepSeek Harness(dsh)插件精选列表
★ 22,025未汉化DSH
73.6
新词雷达zhuyansen/new-term-radar
new-term-radar新词雷达
★ 2,049已汉化MCP
72.8
插件生态导航0xsline/awesome-deepseek-harness
安装 贡献指南 DeepSeek Docs 公开插件目录 Issues
★ 1,188已汉化DSH
72.6
技能注册中心iflytek/skillhub
企业级开源智能体技能注册中心——发布、发现并管理组织内可复用的技能包。
★ 5,358已汉化DSH
71.9
插件市场目录imsai-sh/awesome-deepseek-harness-plugins
面向 DeepSeek Harnessdsh生态的社区插件目录,共收录 13938 个插件含 PR 收录与…
★ 350已汉化DSH
71.8
插件精选清单Anil-matcha/awesome-dsh-plugin
DeepSeek Harnessdsh精选指南——DeepSeek…
★ 1,013已汉化DSH
71.7