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

桌面壳启动器 llyyhh0487/desk-harness

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

自动部署本地服务并托盘驻留,双击即用

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

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

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

状态速览

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

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 264 处,展示前 39 条)
  • 写入本地文件
    main.js:57
    fs.appendFileSync(launchLogPath, '[' + new Date().toISOString() + '] ' + line + '\n');
  • 写入本地文件
    main.js:89
    fs.appendFileSync(crashLogPath(), line, 'utf8');
  • 读取本地文件
    main.js:148
    const saved = JSON.parse(fs.readFileSync(configPath, 'utf8').replace(/^ FEFF/, ''));
  • 写入本地文件
    main.js:169
    try { fs.writeFileSync(configPath, JSON.stringify(cfg, null, 2)); } catch { }
  • 读取本地文件
    main.js:196
    if (fs.existsSync(p)) {
  • 写入本地文件
    main.js:199
    fs.copyFileSync(p, dst);
  • 读取本地文件
    main.js:238
    const src = (cfg.logoFile && fs.existsSync(cfg.logoFile)) ? cfg.logoFile : logoPath;
  • 读取本地文件
    main.js:242
    const buf = fs.readFileSync(src);
  • 读取本地文件
    main.js:246
    try { logoDataUri = 'data:image/png;base64,' + fs.readFileSync(logoPath).toString('base64'); }
  • 读取本地文件
    main.js:249
    try { fxJsSource = fs.readFileSync(fxJsPath, 'utf8'); } catch (e) { log('fx.js read failed', e.message); }
  • 写入本地文件
    main.js:271
    fs.copyFileSync(cliBgOverride, dst);
  • 执行外部命令来自配置/变量
    main.js:345
    const r = spawnSync(process.env.ComSpec || 'cmd.exe', ['/d', '/s', '/c', 'npm root -g'], {
  • 发起网络请求
    main.js:389
    const req = http.get({ host: '127.0.0.1', port, path: '/', timeout: 3000 }, (res) => {
  • 写入本地文件
    main.js:451
    fs.mkdirSync(base, { recursive: true });
  • 删除本地文件
    main.js:454
    fs.rmSync(probe, { force: true });
  • 执行外部命令来自配置/变量
    main.js:523
    const child = spawn(process.env.ComSpec || 'cmd.exe', ['/d', '/s', '/c', '"' + line + '"'], Object.assign({ windowsHide: true, windowsVerbatimArgument
  • 执行外部命令来自配置/变量
    main.js:555
    execFile(nodeExe, ['--version'], { windowsHide: true, env: spawnEnv(), timeout: 20000 }, (err, stdout) => {
  • 执行外部命令来自配置/变量
    main.js:604
    const wr = spawnSync(process.env.ComSpec || 'cmd.exe', ['/d', '/s', '/c', 'where npx'], {
  • 执行外部命令来自配置/变量
    main.js:661
    const r = spawnSync(process.env.ComSpec || 'cmd.exe', ['/d', '/s', '/c', 'where pnpm'], {
  • 执行外部命令固定命令
    main.js:708
    await execFile('powershell.exe', ['-NoProfile', '-ExecutionPolicy', 'Bypass', '-Command', ps], { windowsHide: true });
  • 发起网络请求
    main.js:722
    fetch(url, { signal: controller.signal }).then((res) => {
  • 删除本地文件
    main.js:771
    fs.rmSync(path.join(envDir(), 'node.zip'), { force: true });
  • 删除本地文件
    main.js:772
    fs.rmSync(path.join(envDir(), 'unzip'), { recursive: true, force: true });
  • 删除本地文件
    main.js:795
    fs.rmSync(unzipDir, { recursive: true, force: true });
  • 删除本地文件
    main.js:803
    fs.rmSync(envNodeDir(), { recursive: true, force: true });
  • 删除本地文件
    main.js:808
    fs.rmSync(zip, { force: true });
  • 发起网络请求
    main.js:1303
    const res = await fetch(url, { headers: { 'user-agent': STORE_UA }, signal: controller.signal });
  • 发起网络请求
    main.js:1448
    const res = await fetch(`${r}/${pkg}`, { headers: { 'user-agent': STORE_UA }, signal: AbortSignal.timeout(20000) });
  • 请求外部主机api.github.com
    main.js:1472
    const res = await fetch(`https://api.github.com/repos/${fullName}/releases?per_page=3`, {
  • 发起网络请求
    main.js:1472
    const res = await fetch(`https://api.github.com/repos/${fullName}/releases?per_page=3`, {
  • 发起网络请求
    main.js:1521
    const res = await fetch(`${hit.registry}/${guess}`, { headers: { 'user-agent': STORE_UA }, signal: AbortSignal.timeout(15000) });
  • 请求外部主机api.github.com
    main.js:1819
    const res = await fetch(`https://api.github.com/repos/${fullName}`, { headers: { 'user-agent': STORE_UA } });
  • 请求外部主机github.com
    main.js:1840
    const res = await fetch(`https://github.com/${fullName}`, { headers: { 'user-agent': STORE_UA } });
  • 请求外部主机registry.npmjs.org
    main.js:1863
    const res = await fetch(`https://registry.npmjs.org/${pkg}`, { headers: { 'user-agent': STORE_UA } });
  • 请求外部主机registry.npmjs.org
    main.js:2019
    const res = await fetch(`https://registry.npmjs.org/-/v1/search?text=${encodeURIComponent(query.q)}&size=250&from=${from}`, {
  • 请求外部主机registry.npmjs.org
    main.js:2198
    const res = await fetch(`https://registry.npmjs.org/${encodeURIComponent(name)}/latest`, {
  • 写入剪贴板
    main.js:2375
    clipboard.writeText(lines.join('\n'));
  • 发起网络请求
    fx.js:116
    return fetch('/api/' + method, {
  • 启用终端会话(PTY)
    term-helper.js:29
    term = pty.spawn(shell, [], {
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库
涉及外部主机:api.github.com、github.com、registry.npmjs.org、api.deepseek.com

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

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

功能亮点

  • 自动部署本地服务
  • 托盘驻留
  • 终端停靠面板

README

由 DeepSeek 最新模型翻译生成
🖥️ DESK HARNESS DeepSeek Harness 的 Windows 桌面壳 —— 一个把网页版“装进”原生窗口的 Electron 魔法盒子 ✨ 你以为你打开的是一个网页?不,你双击的是一个桌面应用。窗口里跑的是原汁原味的 DeepSeek Harness 网页版,外面套的是一层丝滑的桌面皮肤 🧥:托盘驻留、真终端、插件商店、任务栏进度条……全都开箱即用,目标机器上什么都不用装,双击 exe 就是全部。 没有 Node.js?没关系,它自己下 📦 没有 pnpm?没关系,它自己装 🛠️ 连服务都是它自己拉起来的 🚀 —— 你只管坐下聊天。 ✨ 特色一览 | # | 特色 | 一句话 | | 1 | 🪄 零环境依赖 | 自动检测 + 一键部署:Node/pnpm/npx/dsh 缺啥补啥,有就不重复下 | | 2 | 🚀 服务自管理 | 在 workspace 里 npx --yes dsh web 拉起,与手动终端一字不差;三级降级 + 秒级失败感知 | | 3 | 🌌 科技感启动页 | 打字机状态、检查清单、倒计时/立即进入、首次引导、自定义背景与欢迎语 | | 4 | 🎨 自绘标题栏 | 渐变毛玻璃、菜单、会话标题、Token 用量胶囊、💰 余额胶囊 |
展开完整文档(README 剩余 1 节)
🖥️ DESK HARNESS

DeepSeek Harness 的 Windows 桌面壳 —— 一个把网页版“装进”原生窗口的 Electron 魔法盒子 ✨

你以为你打开的是一个网页?不,你双击的是一个桌面应用。窗口里跑的是原汁原味的 DeepSeek Harness 网页版,外面套的是一层丝滑的桌面皮肤 🧥:托盘驻留、真终端、插件商店、任务栏进度条……全都开箱即用,目标机器上什么都不用装,双击 exe 就是全部。

没有 Node.js?没关系,它自己下 📦 没有 pnpm?没关系,它自己装 🛠️ 连服务都是它自己拉起来的 🚀 —— 你只管坐下聊天。

✨ 特色一览

| # | 特色 | 一句话 |
| 1 | 🪄 零环境依赖 | 自动检测 + 一键部署:Node/pnpm/npx/dsh 缺啥补啥,有就不重复下 |
| 2 | 🚀 服务自管理 | 在 workspace 里 npx --yes dsh web 拉起,与手动终端一字不差;三级降级 + 秒级失败感知 |
| 3 | 🌌 科技感启动页 | 打字机状态、检查清单、倒计时/立即进入、首次引导、自定义背景与欢迎语 |
| 4 | 🎨 自绘标题栏 | 渐变毛玻璃、菜单、会话标题、Token 用量胶囊、💰 余额胶囊 |
| 5 | 🖥️ 真终端停靠面板 | node-pty 真终端、侧边滑出不挤对话区、宽度记忆 |
| 6 | 📄 文档停靠面板 | 本地 md/代码/日志即开即读、可编辑保存 |
| 7 | 📁 工作区文件面板 | 拖文件进工作区,AI 直接可读 |
| 8 | 🧩 dsh-plugin 插件商店 | 全量索引、精选/全部/我的插件、双语 README、更新检测、一键重启生效 |
| 9 | 🔔 桌面原生体验 | 托盘驻留、Ctrl+Alt+D 唤起、任务栏进度条、完成通知、单实例 |
| 10 | 🖼️ 视觉定制 | 壁纸(图/视频)、界面+exe 图标一体换、深浅主题、置顶、开机自启 |
| 11 | 🎛️ 命令面板 | Ctrl+K 集中所有开关与入口 |
| 12 | 🔒 安全底座 | 渲染沙箱、IPC 最小权限、服务只绑 127.0.0.1、密钥不落盘 |

📖 详细介绍

🪄 零环境依赖:装完就能用

双击安装包 → 首次启动弹出一个部署窗口,自动检测你机器上的 Node.js / pnpm / npx 和 @deepseek-ai/dsh:

- 有 → 直接复用,零下载、秒过;
- 没有 → 自动从镜像下载 Node.js、安装 pnpm、生成 npx 外壳、把依赖装进「安装目录\deepseekharness-desktop\workspace」——全程不用你敲一个命令。

装完它会把这些运行时加进用户 PATH,系统终端里也能直接用。部署位置由安装包选的安装目录决定,卸载时一并清干净。

🚀 服务自管理:它就是你的“手动拉起”,自动化了

网页版需要一个本地服务(dsh web,只监听 127.0.0.1)。DESK HARNESS 的做法和你手动排查时一模一样:进到 workspace 目录,执行 npx --yes dsh web。

- 启动时检测端口:已有服务 → 直接挂上,不重复拉起;没有 → 自己拉;
- 拉不起?自动降级三连:裸 dsh → 绝对路径(8.3 短路径),每一步秒级感知失败,不用傻等;
- 全程零 PowerShell 黑箱、全链路日志落盘(见下方“故障排查”);
- 装/删插件后一键「重启服务并重启桌面端」,走同一套引擎。

🌌 启动页:打开即仪式感

打字机动画逐字报状态:运行环境检查 ✅ → 本地服务检测/启动 🚀 → 就绪。首次使用带你走 API Key 引导;此后 3 秒倒计时自动进入,或点「立即进入」。欢迎语、背景图都能在控制面板里换。

🎨 自绘标题栏:网页穿上了西装

渐变 + 毛玻璃 + 霓虹分界线的自绘标题栏,右侧无缝挂接 Windows 原生窗口按钮。中间显示当前会话标题;右侧一排胶囊:

- Token 胶囊——实时显示本会话 token 用量与上下文占用(与网页版同源数据);
- 💰 余额胶囊——本地读取 .credentials.yaml 里的 Key,每 5 分钟查询一次账户余额,点击直达官方用量页。

🖥️ 真终端 + 📄 文档 + 📁 工作区:三合一停靠面板

窗口右侧滑出的停靠面板(不压缩对话区,宽度可拖拽记忆):

- 终端:基于 node-pty 的真终端(不是样子货),cwd 直接落在 workspace; Ctrl+ 秒开;
- 文档:选一个本地 md/代码/日志即开即读,还能编辑保存(仅限你亲自选过的文件,安全白名单);
- 工作区:把文件拖进 files/ 目录,AI 侧直接可读,喂资料零摩擦。

🧩 插件商店 dsh-plugin

标题栏一键展开的侧边商店,索引来自 GitHub topic + Search API + npm 注册表三源聚合:

- 分区浏览:🌟 精选(评分制)/ 全部 / 📦 我的插件;
- 卡片即点即看详情:简介、标签、星标、双语 README(自带翻译,本地缓存);
- 安装一条龙:镜像测速选源 → npm 预构建直装(自动构建白名单兜底)→ 完成后引导一键重启生效;
- 已装插件显示当前版本,检测到新版出现「更新 vX.Y.Z」按钮,卸载按钮常驻。

🔔 桌面原生体验

系统托盘驻留(关窗不下线)、Ctrl+Alt+D 全局唤起、任务完成/审批的系统通知、任务进度实时同步到 Windows 任务栏进度条、单实例、开机自启动。

🖼️ 视觉定制

- 壁纸:图片 / mp4 / webm / gif 都行,浓度滑杆可调,恢复默认 = 网页版原味背景;
- 图标:界面图标与 exe 图标一体更换——标题栏/启动页/窗口/任务栏/托盘即时生效,exe 图标重新打包生效,一键恢复默认;
- 主题:深/浅自动跟随系统;窗口置顶、特效开关(视觉特效 / 标题栏 / Token 胶囊 / 进度条)逐个可关。

🎛️ 命令面板

Ctrl+K 一个面板收拢全部:主题、壁纸、启动页、窗口、工具五组选项,点行即切换,快捷键党狂喜。

🔒 安全底座(发布前经过完整审计)

- 渲染进程 contextIsolation + sandbox,preload 只暴露白名单 API;
- 终端命令执行、文档读写、部署窗口等特权通道按窗口来源最小授权;
- 服务只绑定 127.0.0.1,不对外监听;
- API Key 只从本地凭据读取、只发 DeepSeek 官方域名,不落日志不写盘。

📦 安装(给用户看的,就 3 步)

1. 去 Releases 下载 desk-harness-setup-1.0.0.exe
2. 双击 → 选个目录 → 装完自动启动
3. 等它自己部署完(有 Node 的机器零下载秒过)→ 开聊 💬

卸载?控制面板 → 卸载。干净利落,只留你的会话数据(.dsh)在原地等你。

📂 数据去哪了:部署环境在 \deepseekharness-desktop\,配置在 %APPDATA%\deepseekharness-desktop\,会话/插件与命令行版共享 C:\Users\\.dsh——凭据不用重新配。

🔨 从源码构建(给开发者看的)

cd desktop
npm install # 慢的话挂镜像:
$env:ELECTRON_MIRROR = "https://npmmirror.com/mirrors/electron/"
$env:ELECTRON_BUILDER_BINARIES_MIRROR = "https://npmmirror.com/mirrors/electron-builder-binaries/"

npm start # 开发模式:直接复用仓库里的 dsh 后端,边改边跑
npm run pack # 打包 → dist/desk-harness-setup-1.0.0.exe

小彩蛋 🥚:开发模式下它会向上回溯目录树找仓库的 node_modules\@deepseek-ai\dsh——把 exe 丢进仓库任意角落都能认出家。

🔍 拉不起服务?先别慌

这套桌面端是全链路日志化的,%APPDATA%\deepseekharness-desktop\ 里躺着四个侦探 🕵️:

| 文件 | 它在说什么 |
| launch.log | 拉起全链路:环境快照 → 每次命令/cwd → 端口探测每步 → 服务前 10 秒输出 → 结论 |
| service-out.log | 服务自己的 stdout/stderr(报错都在这) |
| server.log | 桌面端实际执行的启动命令 |
| setup.log | 首次部署全过程 |

手动排查口诀:打开 workspace 目录 → 终端敲 npx dsh web。桌面端用的就是这条命令,一模一样。

🗂 目录结构

desktop/
main.js 主进程大脑(窗口/托盘/菜单/部署/监督式拉起/商店/终端/余额) preload.js 渲染层桥梁(contextIsolation + sandbox,只放行白名单 API) fx.js / fx.css 注入网页版的桌面皮肤(特效/标题栏/商店/面板/命令面板) splash.html 启动页 setup.html 首次部署窗口 dock.html / dock.js / term-helper.js 终端停靠面板(xterm + node-pty) prompt.html 端口设置 close-dialog.html 关闭确认 build/ 图标与 NSIS 脚本 scripts/restart-service.ps1(手动重启脚本)

⚖️ License

MIT —— 拿去用,玩得开心 🎉
预览分享卡片长什么样 ↓llyyhh0487/desk-harness
分享 · DeepSeek Harness Hub
llyyhh0487/desk-harness

自动部署本地服务并托盘驻留,双击即用

这是你的仓库?认领条目

回到顶部