dsh-desktop
开发工具 活跃维护

dsh-desktop

Zhanggp98/dsh-desktop

内置Node.js免部署,三步启动动画,dsh环境缺失时自动npx安装修复,支持主题跟随、自定义标题栏与托盘常驻,双击即用无需命令行,适配Windows系统。

0
Stars 标星
0
Forks 分支
0
Watchers 关注
0
Open Issues
JavaScript
主要语言
None
开源协议
1001 KB
仓库大小
1 个月前
最后推送
一键安装扩展 / 插件指令
dsh plugin --profile web add github:Zhanggp98/dsh-desktop
git clone https://github.com/Zhanggp98/dsh-desktop.git
git clone git@github.com:Zhanggp98/dsh-desktop.git
README.md main

DeepSeek Harness 桌面客户端(壳)

Electron 套壳封装 dsh web,提供 Codex 式的独立桌面窗口体验:自绘标题栏、左侧导航栏、托盘常驻、单实例、进程生命周期管理,一键打包 Windows NSIS 安装程序。

⚠️ 平台支持:目前仅支持 Windows(macOS / Linux 支持后续规划中)。

✨ 壳的功能

  • 加载页面:启动动画(三步环境检查:Node.js 检查 → dsh 检查 → 服务启动),每步状态实时打勾/打叉,跟随主题
  • 内置 Node.js:安装包自带 Node(约 25MB),系统没装 Node 也能直接运行;winget 仅作兜底
  • 环境自动修复:缺 dsh 自动通过 npx 安装,零命令行
  • 自定义标题栏:鲸鱼图标 + 标题 + 可拖动窗口 + 毛玻璃 + 按钮随主题变色
  • 左侧导航栏:Harness / 插件 / MCP / Skills 页面切换,悬停提示跟随鼠标位置
  • 插件管理:卡片化展示第三方插件,支持安装(npm registry)/ 卸载,成功靠卡片动画反馈
  • MCP 管理:卡片化管理 MCP 服务器(stdio / streamable-http),支持添加 / 编辑 / 删除,保存后自动重启服务生效
  • Skills 管理:扫描 DSH 标准技能位置(~/.agents/skills 等),支持文件夹导入安装 / 卸载,带过渡动画与高亮反馈
  • 壳窗口背景跟随:导航栏/标题栏毛玻璃实时透出 DSH 主题色或壁纸(事件驱动,零轮询,与具体插件解耦)
  • 主题跟随:加载页面、标题栏、导航栏全部跟随 DSH 主题(浅色 / 深色 / 跟随系统)
  • 关闭选择框:点关闭时弹出勾选式选择(关闭窗口 / 关闭服务 多选组合),支持最小化到托盘 / 仅退出 / 退出并停止服务
  • 托盘常驻:托盘菜单区分「停止服务并退出」/「退出」
  • 端口复用:检测到 dsh web 已在运行则直接复用,否则自动拉起,避免多实例
  • 单实例:重复打开应用会把已有窗口拉回前台

📸 界面预览

加载页面(启动动画,主题跟随):

加载中 · 深色 加载中 · 浅色
启动加载中-深色 启动加载中-浅色

主界面(独立窗口 + 自定义标题栏 + 左侧导航栏):

深色主题 浅色主题
主界面-深色 主界面-浅色

插件管理页(卡片化 + 安装/卸载):

深色主题 浅色主题
插件管理-深色 插件管理-浅色

MCP 管理页(卡片化 + 添加/编辑/删除):

深色主题 浅色主题
MCP管理-深色 MCP管理-浅色

Skills 管理页(技能卡片 + 导入入口):

深色主题 浅色主题
Skills管理-深色 Skills管理-浅色

🚀 开发运行

npm install            # 安装依赖(含 Electron 运行时)
npm start              # 启动桌面应用(自动拉起/复用 dsh web 并开窗口)

📦 打包安装程序

⚠️ 打包前先准备内置 Node:项目用 vendor/node 里的便携版 Node(打包时打进 resources/node)。
它不在 git 仓库里(体积大),需要先下载解压:

# 下载 Node 便携版(以 v26.7.0 为例,npmmirror 镜像)
curl -L -o node.zip https://npmmirror.com/mirrors/node/v26.7.0/node-v26.7.0-win-x64.zip
# 解压并重命名到 vendor/node(去掉版本号目录)
Expand-Archive node.zip -DestinationPath vendor-tmp
Move-Item vendor-tmp/node-v26.7.0-win-x64 vendor/node

然后打包:

npm run pack           # 生成免安装目录(dist/win-unpacked/)
npm run dist           # 生成 NSIS 安装程序(dist/DeepSeek Harness Setup *.exe)

⚙️ 环境变量

变量 作用
DSH_DESKTOP_URL 覆盖 GUI 地址(默认 http://localhost:3080)
DSH_DESKTOP_DSH_CMD 指定 dsh 可执行文件路径(默认自动定位:PATH → npx 缓存)
DSH_DESKTOP_HOLD_SPLASH 预览模式:加载页面完成后停留不进入主页面(调试用)

🧠 设计说明

  • Node 优先级:系统已装 Node → 优先使用;系统没装 → 使用应用内置 Node(resources/node)。
  • 端口复用:启动时先探测 3080 并确认是 DSH 服务;已有实例则直接复用,否则后台拉起一个,避免多实例。
  • 关闭行为:点关闭弹出勾选式选择框——都不勾 = 最小化到托盘;仅勾窗口 = 退出客户端(服务保留);仅勾服务 = 只停服务;都勾 = 退出并停止服务。
  • 托盘常驻:托盘菜单提供「停止服务并退出」(无条件结束 3080 服务)/「退出」(保留服务)。
  • 壳窗口背景跟随:在 Harness iframe 注入 MutationObserver,监听页面 style / data-dsh-bg / colorScheme 等属性变化,经 postMessage → IPC 立即同步——导航栏/标题栏保持默认中性半透明(浅色/深色各自定义),body 背景透出 DSH 主题色或壁纸,毛玻璃自然跟随;与具体插件解耦(只读 DSH 标准 CSS 变量)。
  • 单实例:重复打开应用会把已有窗口拉回前台。

📁 目录结构

dsh-desktop/
├── electron/
│   ├── main.js        # 主进程(窗口/托盘/生命周期/服务管理/IPC)
│   ├── preload.js     # 窗口控制桥接(标题栏按钮 + 管理页 IPC + 关闭选择)
│   ├── splash.html    # 加载页面(三步状态机,双主题)
│   ├── nav.html       # 壳页面(标题栏 + 左侧导航栏 + 内容 iframe + 关闭选择框)
│   └── manage.html    # 插件/MCP/Skills 管理页(卡片化 UI)
├── build/
│   ├── icon.png       # 应用图标 256x256(黑鲸)
│   ├── icon-blue.png  # exe 内嵌图标(蓝鲸,桌面快捷方式)
│   ├── tray.png       # 托盘图标 32x32
│   ├── favicon-official.svg  # 官方鲸鱼矢量图
│   └── favicon-blue.svg      # 蓝色鲸鱼矢量图
├── vendor/node/       # 内置 Node 便携版(git 忽略,打包前置条件)
├── screenshots/       # 界面截图(README 引用)
├── convert-icon.js    # 图标生成脚本
├── package.json       # 依赖与 electron-builder 配置
└── dist/              # 打包产物