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

桌面启动器 moonlight273/dsh-desktop

DeepSeek Harnessv0.2.0
moonlight27351 天前有提交已提供中文文档扫描:含敏感能力

一键启动 DSH 服务器并在独立窗口打开 Web 界面

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

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

自动兼容检查未通过:仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add moonlight273/dsh-desktop
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · ui
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
数据截至 2026/09/25·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 51 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

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

验证判据与等级说明 →

可信度证据

安装兼容性检查需源码安装

仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-desktop @ 0.2.0
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/9/21 23:56:04

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 16 处,展示前 15 条)
  • 读取本地文件
    src/main.js:55
    return { ...defaultConfig(), ...JSON.parse(fs.readFileSync(configPath(), "utf8")) };
  • 读取本地文件
    src/main.js:82
    dshBin = candidates.find((p) => fs.existsSync(p));
  • 读取本地文件
    src/main.js:90
    const pkg = JSON.parse(fs.readFileSync(path.join(path.dirname(dshBin), "..", "package.json"), "utf8"));
  • 读取本地文件
    src/main.js:111
    const bundledOk = fs.existsSync(b.node) && fs.existsSync(b.dshBin);
  • 写入本地文件
    src/main.js:151
    await fsp.mkdir(target, { recursive: true });
  • 读取本地文件
    src/main.js:156
    if (fs.existsSync(marker)) return;
  • 读取本地文件
    src/main.js:157
    if (!fs.existsSync(path.join(target, "profiles"))) {
  • 写入本地文件
    src/main.js:161
    await fsp.writeFile(marker, new Date().toISOString());
  • 写入本地文件
    src/main.js:167
    await fsp.mkdir(dest, { recursive: true });
  • 写入本地文件
    src/main.js:173
    else if (e.isFile()) await fsp.copyFile(s, d);
  • 发起网络请求
    src/main.js:235
    const req = http.get(
  • 写入本地文件
    src/main.js:281
    await fsp.mkdir(home, { recursive: true }).catch(() => {});
  • 执行外部命令来自配置/变量
    src/main.js:301
    const child = spawn(runtime.nodePath, args, {
  • 执行外部命令固定命令
    src/main.js:428
    spawnSync("taskkill", ["/PID", String(child.pid), "/T", "/F"], { windowsHide: true, stdio: "ignore" });
  • 写入本地文件
    src/main.js:519
    fs.writeFileSync(argValue("--shot"), img.toPNG());
扫描于 2026/11/4(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库

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

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 一键启动服务器
  • 独立窗口打开界面
  • 内嵌WebGUI

Windows 桌面版 DeepSeek Harness —— 一键启动的 Electron 桌面封装,内嵌 DSH 服务器与 Web GUI(非官方)

README

由 DeepSeek 最新模型翻译生成
DeepSeek Harness Desktop(桌面版) 把 DeepSeek Harness 变成 Windows 桌面软件:Electron 应用内嵌启动 DSH 服务器,并在独立窗口中显示 DSH 的 Web GUI,无需手动开终端、无需自己敲 dsh web。 非官方项目声明本项目是第三方桌面封装(wrapper),不是 DeepSeek 官方产品,与 DeepSeek 官方无隶属或背书关系。 名称中的 "DeepSeek Harness" 指向上游开源项目 @deepseek-ai/dsh(MIT 许可)。 本项目自身代码同样以 MIT 许可发布(见 LICENSE),应用图标为自制,非官方商标素材。 使用本软件仍需自行准备 DeepSeek API 凭据,并遵守上游项目与 DeepSeek 平台的服务条款。
展开完整文档(README 剩余 1 节)
DeepSeek Harness Desktop(桌面版)

把 DeepSeek Harness 变成 Windows 桌面软件:Electron 应用内嵌启动 DSH 服务器,并在独立窗口中显示 DSH 的 Web GUI,无需手动开终端、无需自己敲 dsh web。

非官方项目声明本项目是第三方桌面封装(wrapper),不是 DeepSeek 官方产品,与 DeepSeek 官方无隶属或背书关系。
名称中的 "DeepSeek Harness" 指向上游开源项目 @deepseek-ai/dsh(MIT 许可)。
本项目自身代码同样以 MIT 许可发布(见 LICENSE),应用图标为自制,非官方商标素材。

使用本软件仍需自行准备 DeepSeek API 凭据,并遵守上游项目与 DeepSeek 平台的服务条款。

特性

- 一键启动:自动探测本机已装的 dsh(或使用自包含捆绑运行时),启动 dsh --profile web
- 智能端口:默认 3080,被占用时自动改用 OS 分配端口,无需手动处理冲突
- 版本感知:系统 dsh 与捆绑运行时谁新用谁——升级全局 dsh 即自动跟随,无需重新打包
- 桌面集成:独立窗口 + 应用菜单(在浏览器打开 / 重启服务器 / 服务器日志 / 退出)
- 日志面板:内嵌查看 DSH 服务器 stdout/stderr
- 干净退出:关闭应用时清理 DSH 服务器进程树
- 隐私:启动时禁用 DSH 遥测(DSH_TELEMETRY_DISABLED=1)

界面预览

应用窗口内即 DSH 的 Web GUI(原生窗口 + 应用菜单,无浏览器地址栏):

DSH GUI in the desktop window

目录结构

dsh-desktop/
├── src/
│ ├── main.js # Electron 主进程:探测运行时、spawn 服务器、窗口管理 │ ├── preload.js # contextBridge 安全桥 │ └── renderer/ # 启动页 / 错误页 / 日志窗口 ├── scripts/ │ ├── make-icon.ps1 # 生成应用图标(icon.png / icon.ico) │ └── build-runtime.mjs # 构建自包含运行时(纯 Node:拷贝 node + dsh 安装树 + home 模板) ├── assets/ # 图标 ├── resources/ # 自包含运行时(由 build-runtime.mjs 生成,不入库) └── release/ # electron-builder 打包产物

快速开始(开发模式)

cd dsh-desktop
npm install # 安装 electron / electron-builder
npm start # 启动桌面应用(自动探测系统 dsh)

首次启动会在系统托盘/任务栏出现窗口;默认使用本机 ~/.dsh 作为 DSH_HOME。

冒烟测试(无窗口)

npm run smoke # 等价于: electron . --smoke --no-window

只启动服务器、等待就绪、探测 HTTP 可达后退出;stdout 输出 DSH_DESKTOP_SMOKE_OK 。

带窗口 + 截图的完整验证:

electron . --smoke --home --shot

模拟打包布局(用本机构建的 resources 验证捆绑运行时):

$env:DSH_DESKTOP_RESOURCES = "D:\harry\Documents\dsh-desktop\resources"
electron . --smoke --no-window

自包含打包(不依赖用户已装的 dsh)

1) 构建运行时(下载 node 官方包 + 拷贝全局 dsh 安装 + 制作 home 模板)
npm run build:runtime

2) 打包安装版(NSIS)与便携版
npm run dist

打包后的应用优先使用 resources/dsh-runtime 中的捆绑运行时与 resources/dsh-home-template 模板(首次运行时复制到 %APPDATA%\dsh-desktop\home);未捆绑时自动回退到系统已安装的 dsh。

配置

配置文件位于 %APPDATA%\dsh-desktop\config.json(或打包版 userData 目录):

{
"port": 3080,
"dshHome": null,
"nodePath": null,
"dshBin": null,
"autoOpenBrowser": false
}

- port:首选端口(0 = 总是让 OS 分配)
- dshHome:自定义 DSH_HOME(默认:捆绑模式 userData/home,系统模式 ~/.dsh)
- nodePath / dshBin:自定义 Node 可执行与 dsh 入口(自动探测失败时使用)

工作原理(学习笔记)

1. 运行时探测(版本感知):比较系统全局 dsh(%APPDATA%\npm\node_modules\@deepseek-ai\dsh)与捆绑运行时(process.resourcesPath/dsh-runtime)的版本,取较新者:升级全局 dsh 后桌面版自动跟随;接收者机器无全局 dsh 时自动使用捆绑运行时。
可用配置 runtimeMode 强制 system / bundled。
2. 启动服务器:node /lib/bin.js --profile web --port ,继承环境并注入 DSH_HOME,关闭遥测;dsh ≥ 0.1.1-rc.2 追加 --no-open(否则新版会尝试打开默认浏览器)。
3. 就绪检测:解析服务器 stdout 中的 dsh web: http://127.0.0.1: 行(--port 0 时这是唯一能拿到实际端口的方式),再轮询 HTTP 兜底。
4. 窗口:就绪前显示启动页(本地文件),就绪后 loadURL 加载 GUI。
5. 清理:before-quit 时 taskkill /PID /T /F 杀掉整棵进程树。

开发:推送到 GitHub

常规方式:git push -u origin main

当 github.com:443 被网络阻断时(现象:Could not connect to server、 RPC failed; curl 55 Send failure),可用内置的 API 推送脚本——它走 api.github.com(通常不受影响),凭据复用 Git Credential Manager 已保存的登录:

npm run push # 等价于 node scripts/push-via-api.mjs
node scripts/push-via-api.mjs --dry-run # 先看会推送哪些文件

脚本流程:blobs → tree → commit → 更新分支引用,并自动处理空仓库场景。
提交历史仍是标准的 Git 提交(沿用本地提交信息与作者)。

已知限制

- 关闭应用时强制结束 DSH 服务器进程(Windows 无优雅信号通道);会话数据为 JSONL 持久化,已写入的内容不会丢失。
- 自包含 home 模板默认拷贝本机 ~/.dsh(含凭据与会话),仅限个人使用,切勿分发;分发/公开请用 node scripts/build-runtime.mjs --sanitize。
- 全局 dsh 版本低于捆绑版本时以捆绑为准(runtimeMode: "auto"),如需强制跟随系统请设为 "system"。
- 仅支持 Windows(目标平台)。
预览分享卡片长什么样 ↓moonlight273/dsh-desktop
分享 · DeepSeek Harness Hub
moonlight273/dsh-desktop

一键启动 DSH 服务器并在独立窗口打开 Web 界面

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部