把 DeepSeek Harness(DSH)装进一个原生桌面窗口:Electron 壳 + 自托管 dsh web 服务。网页端全部功能原样保留,并预集成五个开源项目,附带系统托盘、原生通知、插件精选画廊等桌面能力。
- 网页端全部功能:会话 / 子代理 / 工作流 / 计划模式 / 目标 / 技能 / 工具审批 / 设置 / 主题 / 插件管理……(就是完整的
dsh web) - 系统托盘:显示/隐藏窗口、重启 DSH 服务器、在浏览器中打开、插件精选、退出
- 原生通知:页面内通知走系统通知中心;关窗隐藏到托盘时提示
- 外链外置:所有外部链接自动交给系统浏览器
- 单实例锁:重复启动只聚焦已有窗口
- 优雅关闭:退出时干净停掉 dsh 服务进程
- 插件精选画廊:内置 awesome-dsh-plugin 全量清单(1054 插件 / 14 分类),支持搜索、跳转 GitHub、复制链接
- 余额鲸鱼挂件:右下角常驻小鲸鱼,显示 DeepSeek API 余额、今日已用(记账 / 实时令牌双模式)、每轮对话消耗统计;工作状态气泡(正在思考 / 正在使用工具…);可拖拽吸附、按压弹跳、随机台词与音效(由 dsh-whale-widget 提供,本应用内置定制 fork)
| 项目 | 说明 | 作者 / 许可证 |
|---|---|---|
| dsh-better-sidebar | 服务化侧边栏工作台:文件资源管理器 + CodeMirror 编辑器、内嵌浏览器、真实终端(node-pty)、Git 面板、子代理拓扑、后台任务;ctx.betterSidebar 服务开放给其他插件注册 Tab / 文件预览器 |
omdsh-dev · MIT |
| dsh-web-ui | DSH Web GUI 插件 + 皮肤全家桶:梁神模式 agent 预设、任务看板(含 cron 定时执行)、Git 图谱、右侧面板(预览/文件树/SCM)、移动端远程、SSH 运维、图像理解、实时吞吐、皮肤中心 10 款皮肤(内置鲸鱼娘宠物 dsh-pet 与社区插件索引已由本应用禁用,见下) | zhu1090093659 · Apache-2.0 |
| ModLens | 视觉引擎插件:给纯文本模型补上视觉,modlens_read_image 工具 + (modlens vision) 模型项 |
liustack · MIT |
| awesome-dsh-plugin | 社区精选插件清单(本应用的「插件精选」画廊数据来源) | awesome-dsh-plugin · 清单文档 |
| dshmarket | DSH 可视化插件市场:设置页内浏览、搜索、一键安装/升级/卸载社区插件(取代 dsh-web-ui 内置的「社区插件」静态索引,后者已禁用) | dsh-market · MIT |
| dsh-whale-widget | 右下角余额鲸鱼挂件:DeepSeek API 余额(60s 自动刷新)、今日已用(余额差值记账 / 平台令牌实时双模式,峰谷定价)、每轮对话消耗统计;工作状态气泡(会话事件投影:正在思考 / 正在使用工具…,菜单可开关);拖拽吸附、随机台词、音效。本应用集成 本地定制 fork(third-party/DeepSeek-Balance-Whale-Widget,file: 安装) |
MeteorNOX · MIT |
桌面端与网页端(
dsh web)共享同一DSH_HOME:会话、存储、profile 完全连续。桌面端默认监听127.0.0.1:3081(环境变量DSH_DESKTOP_PORT可改),端口被占用自动顺延。
🐋 界面里的鲸鱼只有一只:余额鲸鱼挂件(右下角)。dsh-web-ui 全家桶自带的「鲸鱼娘宠物」已由本应用禁用(
~/.dsh/profiles/web/cordis.patch.yml中pet置disabled: true),其「工作状态气泡」功能已迁移到挂件上(菜单 → 工作状态)。想恢复旧宠物:删除该段 patch 后重启。
🛒 设置页的插件入口只保留插件市场(dshmarket);dsh-web-ui 的「社区插件」静态索引卡片(只列链接、需手动复制命令安装)与市场功能重叠,已一并禁用(
ui-community-plugins置disabled: true)。想恢复:删除对应 patch 段后重启。
⚠️ 本应用会为你的 web profile 安装上述第三方插件。安装插件即以你的权限运行第三方代码,安装前请自行审阅各仓库源码。
dsh-desktop/
├── src/
│ ├── main/
│ │ ├── main.js # Electron 主进程:窗口、托盘、菜单、IPC、生命周期、烟雾自检
│ │ ├── server.js # dsh web 服务管理器:spawn、端口探测、URL 解析、健康检查、优雅关闭
│ │ ├── gallery.js # 插件精选画廊窗口
│ │ ├── splash.html # 启动页
│ │ ├── error.html # 启动失败页
│ │ └── assets/ # 应用图标;放入 assets/whale/(不入库)可覆盖为个人图标
│ ├── preload/preload.js # contextBridge:openExternal / serverStatus / restartServer / notify / galleryData
│ └── gallery/ # 画廊前端 + plugins.json(由 build-gallery.mjs 生成)
├── scripts/
│ ├── setup.mjs # 一键安装编排
│ ├── setup-runtime.mjs # 校验 DSH 运行时
│ ├── setup-profile.mjs # 把集成插件装进 web profile(官方 dsh plugin 通道 + bundles 校准)
│ ├── build-gallery.mjs # 解析 awesome-dsh-plugin README → plugins.json
│ ├── make-icon.mjs # 从方形源图生成 PNG/ICO 图标
│ ├── ask-zhipu.mjs # 直连智谱 GLM-4V-Flash 的调试工具(Key 读自本机 modlens 配置)
│ ├── cdp-*.mjs # CDP 界面调试工具:点击探针(click/probe)、皮肤与壁纸诊断(skin/wallpaper/diag)、协作面板验证(collab)、综合验证(final)
│ ├── fix-server.mjs # 杀掉 3080 端口独立 dsh 服务器(rc.7 双写源),修复会话 seq 乱序
│ ├── restart.mjs # 重启 DSH 服务器 / 应用(托盘「重启」入口)
│ ├── restart-app.ps1 # 延迟重启辅助:仅重启 dsh-desktop 实例
│ └── restart-hard.ps1 # 延迟重启辅助:杀掉全部 electron/dsh 实例后重新拉起
├── start.cmd # Windows 启动器(自动补装缺失依赖)
├── install.cmd # Windows 一键安装
└── package.json # Electron + @deepseek-ai/dsh 运行时
启动链路:
npm start
└─ Electron 主进程
├─ DshServer.start() → node …/dsh/lib/bin.js --profile web --port 3081
│ (共享 $DSH_HOME/profiles/web:集成插件已挂载)
├─ 解析 "dsh web: http://127.0.0.1:3081" → 健康检查 → 窗口加载
└─ 托盘 / 通知 / 外链外置 / 优雅关闭
前置:Node.js ≥ 20(需在 PATH 中)。Windows / macOS / Linux 均可。
npm install # 安装 DSH 运行时(@deepseek-ai/dsh)+ Electron
npm run setup # 自动完成:① 初始化 ~/.dsh(DSH_HOME)骨架
# ② 自动准备 pnpm(PATH 已有则直接用;否则 corepack 生成 shim;再不行就本地 npm 安装)
# ③ 把集成插件装进 web profile(dsh-better-sidebar / ModLens / dsh-web-ui / dshmarket / dsh-whale-widget),并禁用旧桌宠 dsh-pet
# ④ 生成插件精选画廊数据
npm start # 启动桌面版无需手动安装 pnpm,也无需先运行官方 dsh 命令初始化——npm run setup 会全部自动完成。Windows 用户直接双击 start.cmd 最省事:缺依赖自动 npm install,未完成 setup 自动补跑,然后启动。
安装过程不依赖 GitHub(依赖的是 npm 源与 Electron 二进制,均已内置 npmmirror 国内镜像)。无法登录 GitHub 的朋友可以这样拿:
- 把项目文件夹打成 ZIP(排除
node_modules/、.tools/、third-party/、.git/)直接发给对方; - 对方安装 Node.js ≥ 20(国内可从 https://npmmirror.com/mirrors/node/ 下载 LTS MSI);
- 解压 ZIP → 双击
start.cmd→ 全自动完成 npm 安装、环境初始化、插件安装,然后启动。
想改回官方源:删除
.npmrc,或删掉start.cmd中两行set ELECTRON_MIRROR / set npm_config_registry。
npm run setup 详细步骤:
- 自动创建
~/.dsh骨架(profiles / sessions / storages); - 自动准备 pnpm(三层降级:PATH 已有 → corepack shim → 项目内
.tools本地安装,全程无需管理员权限); - 若无
~/.dsh/profiles/web则按官方模板初始化; - 在 profile 的
pnpm-workspace.yaml写入minimumReleaseAgeExclude(绕过 pnpm 11 发布年龄门禁)与allowBuilds(node-pty / ssh2 / cpu-features / cloudflared,规避ERR_PNPM_IGNORED_BUILDS非零退出); - 逐个执行
dsh plugin --profile web add(官方通道,自动并入dsh.profile.bundles并挂载其 bundle patch;单插件失败自动重试); - dsh-web-ui 聚合包以
--ignore-scripts安装(其 ssh2 / cloudflared / cpu-features 原生绑定均为可选件,缺失时插件自带降级,确保任何网络/工具链环境都安装成功); - bundles 校准:pnpm 因原生构建返回非零时官方 reconcile 会被跳过,脚本按官方规则自行把声明了
dsh.bundle.patch的依赖并入 bundles。
- 启动:
npm start(或 Windows 双击start.cmd) - 关闭窗口 ≠ 退出:点 X 隐藏到托盘(首次会弹通知);彻底退出用托盘右键 →「退出」
- 托盘菜单:显示主窗口 / 插件精选 / 重启 DSH 服务器 / 在浏览器中打开 / 退出
- 插件精选:应用菜单「插件 → 插件精选」
- 自定义图标:把自制的
icon-{16,32,256}.png与icon.ico放进src/main/assets/whale/,应用启动时自动优先使用(该目录不入库) - 视觉引擎:粘贴图片或让 agent 读图(
modlens_read_image),由 ModLens 完成(约 5–10 秒/张,需配置视觉引擎,见下)
ModLens 的 openai provider 是通用 OpenAI 兼容插座,国内直连可用(示例为免费的智谱 GLM-4V-Flash):
modlens config set openai.baseUrl https://open.bigmodel.cn/api/paas/v4
modlens config set openai.apiKey <你的key>
modlens config set openai.model glm-4v-flash
modlens config set provider openai
modlens doctor # 验证- 免费版有限速(约每分钟几十次),日常识图够用;可升级
glm-4.6v系列。 - 备选引擎:阿里云百炼 qwen-vl、硅基流动、本地 Ollama(
http://localhost:11434/v1+qwen2.5-vl)。 - 详细文档见 ModLens。
$env:DSH_DESKTOP_SMOKE='1'; npm start # PowerShell页面加载完成后自动采集 DOM 证据(各集成插件的 client bundle、better-sidebar 挂载、插件错误数),打印 [smoke] RESULT: PASS/FAIL 后退出,可用于 CI。
| 现象 | 处理 |
|---|---|
| 启动页一直转圈 | 首次启动需安装插件/构建 node-pty,较慢属正常;失败见错误页提示 |
| 提示 profile 未初始化 | 运行 npm run setup(自动初始化 ~/.dsh 并安装插件),或双击 start.cmd 自动补跑 |
| 找不到窗口 | 窗口隐藏到托盘了——点托盘图标恢复,或重新运行 npm start(单实例会聚焦已有窗口) |
| setup 未能自动准备 pnpm | 极少见:手动执行 npm install -g pnpm 后重跑 npm run setup |
| 端口被占用 | 默认 3081 自动顺延;或设 DSH_DESKTOP_PORT |
与网页端 dsh web 同时运行 |
同一 DSH_HOME 双实例有会话文件并发写风险,建议同一时间只开一个 |
| SSH 加密加速 / cloudflared 隧道不可用 | dsh-web-ui 聚合包默认跳过原生构建脚本(可选件)。需要完整原生能力时,在 ~/.dsh/profiles/web 执行 pnpm rebuild ssh2 cloudflared cpu-features(需可用的编译/下载环境) |
| 装到旧版插件 | profile 的 pnpm-workspace.yaml 已含 minimumReleaseAgeExclude;仍异常则在 ~/.dsh/profiles/web 执行 pnpm update @linxin666/dsh-web-ui-all |
npm install
npm run setup # 准备 profile 与画廊数据
npm run gallery:build # 重新生成插件画廊数据(需 third-party/awesome-dsh-plugin 克隆)
npm start # 启动详见 CONTRIBUTING.md。
- DeepSeek Harness —— 本应用的服务内核(MIT)
- dsh-better-sidebar by omdsh-dev(MIT)
- dsh-web-ui by zhu1090093659(Apache-2.0)
- ModLens by liustack(MIT)
- awesome-dsh-plugin by awesome-dsh-plugin
- dshmarket by dsh-market(MIT)
- dsh-whale-widget by MeteorNOX(MIT)
本项目采用 MIT License,© 2026 Azusa。集成的插件遵循各自仓库的许可证(dsh-better-sidebar MIT、dsh-web-ui Apache-2.0、ModLens MIT、dshmarket MIT)。应用图标源自作者自备的角色设定图。
