dsh-web-ui
zhu1090093659
Plugin and skin collection for DeepSeek Harness (DSH) Web UI - task board, git graph, right-side panel, remote mobile UI, pet, live token stats, and skin center.
PROJECT TOPICS
PROJECT README
免命令行 · 一键管理 DeepSeek Harness 本地服务 · 两种方案任选
基于 DeepSeek Harness(MIT 协议)的本地增强发行版:内置服务管家(启动 / 停止 / 重启 / 状态)、一键打开 GUI,并附带修改版 Web GUI 增强(对话大纲导航、回退到这一步、重新生成)。
本项目是 DeepSeek Harness 的二次开发(基于官方提交 f98a57e 修改),全部代码依据 MIT 开源协议发布。上游版权归 DeepSeek 所有;代码构成、占比与改动声明详见 NOTICE.md。

对话大纲导航栏:右侧常驻目录,完整加载全部对话轮次,点击任意轮次即可定位。
本仓库提供两套独立的桌面方案,按需下载,互不影响:
| 🐍 方案 A:Python 版(推荐) | 🖥 方案 B:Electron 版 | |
|---|---|---|
| 体积 | 小(源码 ≈ 几 MB;自编译 EXE ≈ 65MB) | 大(预编译 EXE ≈ 85MB) |
| 下载方式 | ① 直接运行源码(pip 装依赖)② 或 build_exe.bat 自编译 |
直接下载 Release 里的现成 EXE |
| 运行环境 | 需要 Python ≥ 3.10(轻量) | 免环境,双击即用 |
| 界面 | 原生窗口加载完整 Web GUI(与原版一致 + 大纲导航/回退/重新生成) | 原生窗口 + 手势 + 快捷键屏蔽 + 托盘 + 文件拖放 |
| SmartScreen | 自编译 EXE 不会被拦截 | 下载的 EXE 首次运行可能提示(需签名/解除锁定) |
| 适用人群 | 想要小体积、无拦截、愿意装 Python 的用户 | 想要现成 EXE、手势/快捷键等完整桌面体验的用户 |
| 下载入口 | 👉 README 方式 A / B / C | 👉 Release v0.1.3(含 DSH-Desktop-0.1.3-portable.exe) |
💡 快速建议:想省事 → 选 Python 版(源码几 MB,自己编译无拦截);想免安装环境直接跑 → 选 Electron 版(下载 85MB EXE 双击即用,首次运行点「更多信息 → 仍要运行」即可)。
DeepSeek Harness 的 Web GUI 在浏览器中使用,对日常使用有几个不便:
这个发行版把这些痛点一次性解决:
Python 主程序 + 原生窗口加载完整 DSH Web GUI(desktop-py/dsh_app.py):
build_exe.bat 选 3,在自己电脑上编译为独立 EXE,无 SmartScreen 拦截。DSH_HOME 环境变量 → 同级 harness/ → 常见位置 → 手动选择(纯 UI);pip install pywebview。src/,需要 Node.js 环境自行构建;session.outline RPC,返回整份会话日志的逐轮摘要。全部 DeepSeek Harness 插件体系原样保留:工具(bash / 文件 / 网页搜索 / 工作流 / 子代理等)、会话持久化(JSONL / SQLite)、技能系统、计划模式、审批与交互、Python SDK 等。
| 项目 | 要求 | 说明 |
|---|---|---|
| 操作系统 | Windows 10 / 11(x64) | 完整版桌面应用(pywebview 需 WebView2,Win10/11 自带) |
| Python | ≥ 3.10 | 完整版/启动器均需要(3.14 已测试) |
| Node.js | ≥ 22.19(或 ≥ 24) | 运行 DSH 服务所需(后端,两种方案都需要) |
| pnpm | ≥ 9 | 安装源码依赖 |
| DeepSeek API Key | 需要 | 在 .env 或环境变量中配置 |
| 磁盘空间 | ≥ 2 GB | 源码 + 依赖 + 会话数据 |
| 项目 | 要求 | 说明 |
|---|---|---|
| 操作系统 | Windows 10 / 11(x64) | 仅 Windows |
| Node.js | ≥ 22.19(或 ≥ 24) | 运行 DSH 服务所需(后端) |
| pnpm | ≥ 9 | 安装源码依赖 |
| DeepSeek API Key | 需要 | 在 .env 或环境变量中配置 |
| 磁盘空间 | ≥ 2 GB | 源码 + 依赖 + 会话数据 |
注:两种方案共用同一个 DSH 后端(
harness/),区别只在桌面壳实现(Python 小 / Electron 大)。
Python 版有三种用法任选:A. 完整版桌面应用(推荐 ⭐,原生窗口加载完整 Web GUI + 托盘)→ B. 轻量启动器(浏览器打开)→ C. 自编译 EXE(不装 Python 环境时用)。 需要 Electron 版?直接下载 Release v0.1.3 的现成 EXE,见 Electron 版使用指南。
node --version # 应输出 v22.x 或更高
npm install -g pnpm
pnpm --version # 应输出 9.x 或更高
# 进入 harness 目录(DeepSeek Harness 官方源码修改版)
cd harness
# 1) 安装依赖
pnpm install
# 2) 构建前端与各包(官方标准流程,生成 Web GUI 所需资源)
pnpm run build
cd ..
⚠️ 这两步决定成败(官方流程为
pnpm install→pnpm run build→pnpm dsh web):
pnpm install:安装 node_modules(含 tsx 等运行时依赖);pnpm run build:生成前端 bundle 与各包产物(lib/client.js、apps/web/dist),缺了它 GUI 无法渲染;- 国内网络慢可先执行:
pnpm config set registry https://registry.npmmirror.com再重试。
验证依赖与构建产物就绪(三项都应看到 True / 目录存在):
Test-Path harness\node_modules\tsx # 依赖:返回 True
Test-Path harness\apps\web\dist # 构建:返回 True
Get-ChildItem harness\packages\client\ui-conversation\lib\client.js # 前端 bundle 存在
在 harness/ 目录下创建 .env 文件,内容:
DEEPSEEK_API_KEY=sk-你的密钥
密钥仅保存在本机,不会上传。
原生窗口加载完整版 DSH Web GUI(含我们修改版的全部功能:对话大纲导航、回退到这一步、重新生成、工具卡片、流式回复等),Python 负责服务管理与系统托盘。UI 效果与原版 Web GUI 完全一致。
前置:Python ≥ 3.10(下载 https://www.python.org/downloads/ ,安装时勾选 “Add to PATH”)。
# 安装依赖(只需一次)
pip install pywebview pystray pillow
# 运行完整版桌面应用
python desktop-py/dsh_app.py
启动后自动检测 harness/ 并启动服务,然后打开原生窗口:
💡 找不到
harness/?设置环境变量DSH_HOME指向源码目录,或把仓库解压后保持harness/与desktop-py/同级。
只想在浏览器里用 DSH?用零依赖的轻量启动器:
python desktop-py/dsh_launcher.py
# 点「🚀 启动服务」→「🌐 打开界面」,浏览器自动打开
在自己电脑上把启动器编译成独立 EXE,自己编译的 EXE 不会被 Windows SmartScreen 拦截:
cd desktop-py
build_exe.bat
# 按提示输入:
# 1 - 纯 Python 启动器(tkinter,最小)
# 2 - WebView 窗口版
# 3 - 全量 UI 桌面版(推荐,约 48MB)
# 编译产物:desktop-py/dist/ 目录下
编译完成后,双击 dist/DSH-Desktop.exe(模式 3)即可使用(首次编译约 1-2 分钟)。
📦 若您不想自己编译、想直接下载现成 EXE,请前往仓库 Releases 页面(注意:下载的未签名 EXE 可能触发 SmartScreen,见 FAQ)。
Electron 版提供原生窗口体验:右键手势、快捷键屏蔽、文件拖放、托盘常驻、模型/密钥管理窗口。
# 安装依赖(只需一次)
npm install
# 编译 TypeScript + 复制静态资源
npm run build
# 启动桌面壳
npm run start
# 或直接:npx electron .
启动后:欢迎页点「🚀 启动服务」→ 自动进入聊天界面。
npx electron-builder --win --publish never
# 产物:release/DSH-Desktop-<版本>-portable.exe(便携版)和 -setup.exe(安装版)
🔐 重要说明:Electron EXE 若对外分发(下载给别人),需要代码签名证书(商业 CA 如 DigiCert / Sectigo,个人可申请 OV 证书)才能消除 SmartScreen「无法验证发布者」提示;仅自己电脑使用则不受影响。个人自用建议直接采用方式 A 或 B。
cd desktop-py
python dsh_launcher.py
| 按钮 | 说明 |
|---|---|
| 🚀 启动服务 | 启动本地 DSH 服务(自动定位 harness/ 目录) |
| ⏹ 停止服务 | 停止服务(整棵进程树终止) |
| 🔄 重启服务 | 先停止再启动 |
| 🌐 打开界面 | 在系统默认浏览器打开 Web GUI |
| 更改 DSH 目录… | 手动选择 DSH 源码目录(需包含 apps/cli) |
服务状态实时显示(● 运行中 / ○ 已停止),日志区记录每一步操作结果。
不想装 Python?可以在自己电脑上把启动器编译成独立 EXE:
cd desktop-py
build_exe.bat # 按提示选择版本(1=纯 Python,2=WebView)
# 产物:desktop-py/dist/DSH-Desktop-Python.exe
为什么自己编译不会被拦截? SmartScreen 拦截的是“从网络下载 + 未签名”的组合。自己编译的 EXE 没有“来自网络”标记(Mark-of-the-Web),因此不会出现“无法验证发布者”的警告,双击即用。
用 pywebview(基于系统 WebView2)把 Web GUI 装进原生窗口,比纯 Python 启动器多一层桌面壳体验:
# 1. 安装依赖(只需一次)
pip install pywebview
# 2. 运行窗口版
cd desktop-py
python dsh_webview.py
启动后会自动检测 DSH 目录并尝试启动服务,然后打开原生窗口加载 Web GUI。
也可以随
build_exe.bat选 2 编译为 EXE(已包含 pywebview 打包配置)。
📥 直接下载(免环境,双击即用): Release v0.1.3 →
DSH-Desktop-0.1.3-portable.exe(便携版,约 85MB) 首次运行若提示「无法验证发布者」,点「更多信息 → 仍要运行」即可(未签名 EXE 的正常提示,不影响使用)。
为什么有 Electron 版? 它提供比 Python 版更完整的桌面交互:右键手势(按住右键左右拖动收起/展开侧边栏)、快捷键屏蔽(Ctrl+T/W 等不干扰输入)、文件拖放获得真实路径、托盘常驻、内置模型/API 密钥管理窗口。代价是体积大(约 85MB)且分发需处理签名问题。
与 Python 版的区别:Python 版(方案 A)体积小、可自编译无拦截;Electron 版(本方案)体积大但交互最完整。两者共用同一个修改版 Web GUI(大纲导航、回退/重新生成等功能都有),按需选择即可。
| 能力 | Python 启动器 | WebView 窗口版 | Electron 桌面壳 |
|---|---|---|---|
| 服务管理(启动/停止/重启/状态) | ✅ | ✅ | ✅ |
| 打开方式 | 系统浏览器 | 原生窗口 | 原生窗口 |
| 右键手势(拖拽切换侧边栏) | ❌ | ❌ | ✅ |
| 快捷键屏蔽(Ctrl+T/W 等) | ❌ | ❌ | ✅ |
| 文件拖放获得真实路径 | ❌ | 部分 | ✅ |
| 托盘常驻(关窗不停服务) | ❌ | ❌ | ✅ |
| 模型/API 密钥管理窗口 | 环境变量 | 环境变量 | ✅ 内置窗口 |
| 依赖 | Python 标准库 | Python + pywebview | Node.js + Electron |
| SmartScreen 拦截(自编译/本地运行) | 无 | 无 | 无(自用);分发需签名 |
# 1. 安装依赖(只需一次)
npm install
# 2. 编译 TypeScript + 复制静态资源
npm run build
# 3. 运行单元测试(可选)
npm test
# 4. 启动桌面壳
npm run start
# 或直接:npx electron .
npx electron-builder --win --publish never
# 产物:
# release/DSH-Desktop-<版本>-portable.exe 便携版(免安装,双击即用)
# release/DSH-Desktop-<版本>-setup.exe 安装版(开始菜单快捷方式 + 卸载器)
国内网络打包建议先设置镜像环境变量:
ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ELECTRON_BUILDER_BINARIES_MIRROR=https://npmmirror.com/mirrors/electron-builder-binaries/
Alt+← / Alt+→ 同效;Ctrl+T / W / N / H / L / Tab / 数字键 已被屏蔽,不会干扰输入;Electron EXE 若仅自己电脑使用(或通过 npm run start 运行),不会遇到拦截。若要把 EXE 下载分发给他人,Windows SmartScreen 会提示「无法验证发布者」,需要:
💡 个人自用建议:直接使用 Python 启动器(方式 A)或自编译 EXE(方式 B),无需处理签名问题。
完整保留官方开发流程:pnpm install → pnpm run test / typecheck / build 等,详见 harness/README.md。
cd desktop-py
pip install pywebview # 全量 UI 版需要(仅一次)
python dsh_app.py # 全量 UI 桌面版(推荐)
python dsh_launcher.py # 轻量启动器(零依赖)
python -m py_compile dsh_app.py dsh_api.py dsh_launcher.py # 语法检查
build_exe.bat # 编译为 EXE(1=轻量 / 2=WebView / 3=全量 UI)
Deepseek-Harness-Local-UI/
├── desktop-py/ # Python 客户端(推荐)
│ ├── dsh_app.py # ⭐ 全量 UI 桌面版(自绘聊天 + 大纲 + 服务管家)
│ ├── dsh_api.py # DSH 后端 HTTP/SSE API 客户端
│ ├── dsh_ui/ # 自绘界面(index.html / style.css / app.js)
│ ├── dsh_launcher.py # 轻量启动器(tkinter,零依赖)
│ ├── dsh_webview.py # WebView 窗口版(pywebview,可选)
│ ├── build_exe.bat # 自编译 EXE 脚本(PyInstaller,三种模式)
│ └── requirements.txt # pywebview 等依赖
├── src/ # Electron 桌面壳源码(可选方案)
├── scripts/ # Electron 构建辅助脚本
├── tests/ # Electron 单元测试
├── harness/ # DeepSeek Harness 官方源码(修改版,MIT)
│ ├── packages/ # 全部上游插件包
│ ├── apps/ # CLI / Web 应用
│ └── LICENSE # 上游 MIT 许可证(原样保留)
├── LICENSE # 本仓库 MIT 许可证(DeepSeek + 修改者)
├── NOTICE.md # 代码占比 / 改动声明 / 法律说明
└── README.md # 本文件
| 构成 | 规模 | 占比 |
|---|---|---|
DeepSeek Harness 官方源码(harness/,基线提交 f98a57e) |
≈ 742,000 行 | ≈ 99.75% |
| 本仓库对上游的修改(44 个文件,净增 ≈ 1,845 行) | ≈ 1,845 行 | ≈ 0.25% |
| Python 启动器 / WebView / Electron 壳(本仓库原创) | ≈ 3,000 行 | 独立新增 |
详细的改动清单与声明见 NOTICE.md。
Q:双击 Electron EXE 时 Windows 提示「无法验证发布者 / 已保护你的电脑」?
A:这是 SmartScreen 对“从网络下载的未签名 EXE”的标准拦截。建议改用 Python 启动器 + 自编译(desktop-py/build_exe.bat)——自己编译的 EXE 不会触发该提示。若必须分发 Electron EXE,请申请商业代码签名证书(个人可申请 OV 证书,如 DigiCert / Sectigo / Certum)。
Q:点「启动服务」提示「harness 依赖未安装(缺少 tsx)」?
A:说明 harness/ 目录的依赖没装成功。请打开命令行执行:
cd harness
pnpm install
国内网络慢可先 pnpm config set registry https://registry.npmmirror.com 再执行。完成后用 Test-Path harness\node_modules\tsx 验证(返回 True 即可)。
Q:Python 启动器需要装什么依赖?
A:纯 Python 版零依赖(标准库 + tkinter,Python 自带)。只有 WebView 窗口版需要 pip install pywebview。
Q:找不到 DSH 安装目录?
A:点「更改 DSH 目录…」选择包含 apps/cli/src/bin.ts 的 harness/ 目录;也可以设置环境变量 DSH_HOME。
Q:启动服务失败 / 端口被占用? A:启动器会检测端口占用;点「重启服务」会终止占用端口的进程并重新启动。
Q:服务停了之后,我的对话数据会丢吗? A:不会。对话数据持久化在 DSH 的会话存储中,服务重启后历史完整保留。
Q:需要联网才能用吗? A:需要。聊天依赖 DeepSeek API(需要 API Key),但所有服务都在本机运行,您的对话内容不会上传到除 DeepSeek API 以外的任何地方。
Q:启动器会存我的 API 密钥吗?
A:不存。密钥只读取系统环境变量 / .env,启动器自身不存储、不上传。
Q:这个项目和 DeepSeek 官方是什么关系? A:没有任何隶属 / 背书关系。这是基于官方开源代码(MIT)的个人二次开发发行版。
--host 127.0.0.1,不对外网开放;.env;src/ 源码)。harness/LICENSE(原样保留,未修改);harness/LICENSE。CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: desktop-app、chat-ui、pywebview。