Back to home@241793

DSH-Win-GUI

Deepseek Harness桌面版,为用户提供便捷安装操作,无需输入命令。内置QQBot、Wxclaw渠道连接功能,还有插件市场以及插件安装界面。添加cc-tui兜底插件

Stars
0
Language
JavaScript
Created
Aug 16, 2026
Updated
Aug 18, 2026
GitHub repo

Introduction

DeepSeek Harness 桌面端

基于 Electron 的 deepseek-harness Windows 桌面启动器。它不重新实现 Harness,而是把官方 dsh web 服务包装成一个双击即开、缺组件自动下载安装的桌面程序,并在此基础上提供互联渠道、插件市场、插件安装、技能管理、技能市场、定时任务、会话修复等增强功能。

官方 CLI:@deepseek-ai/dshdsh 命令)。本项目是官方预留 Electron 壳形态的实用实现:Electron 主进程负责检测、安装、拉起后端,窗口加载官方 Web UI。

使用教程:下载安装即可https://github.com/241793/DSH-Win-GUI/releases/download/0.1.0/DeepSeek.Harness-Setup-0.1.0.exe f0b2e445-0f06-41c5-8955-edcd6898a7b6 image


1. 功能特性

1.1 基础启动器

  • 双击即开:单实例锁,重复双击只会聚焦已开窗口。
  • 自动检测:启动时检测 Node.js(≥ 22.5.0)、npm、dsh(@deepseek-ai/dsh)、Web 前端资源。
  • 缺组件一键安装:未安装时显示引导页,「下载并安装」按钮会自动:
    1. 没有可用 Node.js 时,从 npmmirror 下载便携版 Node.js(免管理员权限);
    2. 用 npm 从 npmmirror 安装 @deepseek-ai/dsh 到应用自管目录(优先复用全局已装的 dsh);
    3. 实时显示下载进度与 npm 日志。
  • 启动 Harness:拉起 dsh web --port 0,解析真实端口,把窗口导航到 http://127.0.0.1:<端口>
  • 退出清理:应用退出时 taskkill /T /F 清理后端进程树。
  • 检查 DSH 更新:菜单栏「检查DSH更新」,从 npmmirror 获取最新版本,有新版本弹窗询问是否更新;点击「立即更新」后会弹出独立的「DSH 更新进度」窗口实时显示 npm 安装日志,更新完成后自动重启 dsh web。
  • CC-TUI 终端修复:菜单栏「帮助」旁的「CC-TUI」或启动报错页的「CC-TUI 终端修复」按钮,会检测是否已安装 dsh-TUI(支持 cc-tui / tui 两种 profile,且会校验是否真正挂载了 dsh-cc-tui bundle);未安装或历史 dsh-tui 包损坏则自动安装(优先 npmmirror 的 dsh-cc-tui 包,失败时回退 GitHub tarball)并显示进度,已安装则打开系统终端里的 dsh --profile cc-tui 原生交互界面,方便 dsh web 报错时通过终端排查修复。

1.2 互联(渠道对接,集成在 Harness Web UI)

启动桌面端后,打开 Harness 界面「设置 → 互联」即可管理聊天渠道:

  • QQ Bot:一键安装 @tencent-connect/dsh-qqbotqqbot profile,一键启动并扫码绑定;显示已连接机器人信息(昵称 / Bot ID / AppID)。
  • WxClaw(微信):内置自研 dsh-wxclaw 插件,使用微信 ilink Bot API(https://ilinkai.weixin.qq.com)扫码绑定微信账号;微信发消息给该账号,dsh 接收并回复。
  • 账号管理:每个渠道支持「账号」弹窗查看已绑定账号,并支持删除 / 切换账号。
  • 卸载:每个渠道支持一键卸载(dsh plugin remove 或删除自管目录)。
  • 自动连接:已绑定凭据的渠道在应用启动后自动上线,无需手动启动。

1.3 插件市场(Harness Web UI → 设置 → 插件市场)

  • https://www.dshplugin.store/ 拉取插件列表(首页 HTML 解析,sitemap 兜底)。
  • 支持搜索、分类筛选、已安装筛选。
  • 每个插件显示名称、作者、介绍、star、分类,并提供:
    • GitHub 按钮:打开插件源码仓库;
    • 安装 / 卸载:自动解析安装命令并执行 dsh plugin add/remove,安装完成后自动重启 dsh web 生效;
    • client-only 插件自动写入 profile 入口行,确保被 dsh 识别。

1.4 插件安装(Harness Web UI → 设置 → 插件 → 插件安装 Tab)

官方「插件」设置页新增「插件安装」Tab:

  • 本地导入:选择本地插件文件夹(或 package.json),自动安装到 dsh 插件位置。
  • 链接安装:输入插件链接(一般 GitHub 地址)→「查看」弹出插件信息 →「下载安装」。GitHub 仓库通过官方 tarball 下载到本地再安装,不依赖 git
  • 本界面安装列表:展示通过该 Tab 安装的插件,支持查看信息与删除。

1.5 技能管理(Harness Web UI → 设置 → 技能)

  • 已安装:列出 dsh 当前可发现的 skill(名称、描述、来源),用户 ~/.dsh/skills 下的 skill 支持删除。
  • 安装
    • 本地导入:选择包含 SKILL.md 的文件夹或单个 .md 文件,复制到 ~/.dsh/skills
    • 从链接安装:输入 GitHub 仓库链接,自动下载 tarball 并扫描 SKILL.md / skills/ 目录,安装到 ~/.dsh/skills

1.6 技能市场(Harness Web UI → 设置 → 技能 → 技能市场)

  • 支持自定义市场源,例如:https://github.com/anbeime/skill/tree/main/skills
  • 自动拉取该目录下的技能列表,显示名称、描述、适用场景、附加信息。
  • 支持「查看」详情和「下载」安装到 ~/.dsh/skills
  • 市场源保存在 ~/.dsh/skill-market-source.json

1.7 定时任务(Harness Web UI → 设置 → 定时任务)

  • 支持新建 / 编辑 / 删除 / 启用 / 禁用 / 立即运行任务。
  • 任务配置:名称、执行频率(间隔 / 每天 / 每周 / 单次)、提示词、模型、权限模式、指定技能、前置脚本。
  • 使用 dsh 官方 headless 模式执行:dsh --profile headless --patch <临时配置> "提示词"
  • 运行记录与完整日志保存在 ~/.dsh/scheduled-task-runs.jsonl,支持查看和删除。
  • 应用启动时会自动向 ~/.dsh/skills/scheduled-task-management 写入说明 skill,让 dsh 知道桌面端具备定时任务功能。

1.8 会话修复(Harness Web UI → 设置 → 会话修复)

  • 自动扫描 ~/.dsh/sessions 下所有 session.jsonl.zstd
  • 检测历史记录中的 seq 重复 / 乱序问题。
  • 一键修复:自动备份、删除重复/乱序记录、重新压缩并校验。
  • 修复依赖本机 pythonzstandard 模块;应用启动时会把修复脚本释放到 userData 目录。

1.9 打包分发

  • 提供 NSIS 安装包与免安装版两种产物。
  • 应用图标、窗口图标、安装包图标、快捷方式图标统一使用 assets/icon.ico / assets/icon.png

2. 实现原理

2.1 整体架构

┌────────────────────────────────────────────────────────┐
│                    Electron 主进程                        │
│                                                         │
│  main.js           窗口/单实例/菜单/IPC/生命周期/更新检查  │
│  detector.js       检测 Node、npm、dsh、前端资源           │
│  installer.js      下载便携 Node、npm 安装 dsh             │
│  backend.js        spawn "dsh web --port 0" 并探活        │
│  channels.js       互联渠道管理(QQBot / WxClaw)          │
│  marketplace.js    插件市场(dshplugin.store 抓取/解析)    │
│  plugin-install.js 插件安装 Tab(本地导入/链接安装/历史)    │
│  skills.js         技能列表/导入/链接安装/技能市场           │
│  scheduler.js      定时任务存储/调度/headless 执行/日志      │
│  session-repair.js 会话历史扫描与修复(内嵌 Python 脚本)    │
│  util.js           版本比较、命令执行、下载、解压等工具      │
└──────┬──────────────────────────┬──────────────┬─────────┘
       │ IPC (contextBridge)     │ spawn        │ spawn
       ▼                         ▼              ▼
  preload.js                dsh web 后端    渠道进程(dsh --profile ...)
  renderer/                 (Web UI 3080)   qqbot / wxclaw
  启动/检测/安装页              ▲
       │                      │
       │   dsh 设置页插件(src/connect-plugin,复制为 dsh-connect-center)
       │   注册:设置 → 互联 / 插件市场 / 插件安装 / 技能 / 定时任务 / 会话修复
       │   window.desktopAPI.connect / market / pluginInstall / skills / scheduler / repair
       └── 检测通过后 win.loadURL(http://127.0.0.1:<端口>)

2.2 启动流程

  1. 双击 exe → app.requestSingleInstanceLock() 防重复打开。
  2. 显示启动页 → 渲染层通过 IPC 调用 detect-harness
  3. 主进程执行 detector.detectAll()
    • 探测系统 Node(PATH 找 node,再查常见安装目录);
    • 探测应用自管便携 Node(userData/runtime/node 下递归找 node.exe);
    • 选一个可用 Node(优先系统,其次自管);
    • npm prefix -g、PATH 目录扫描、.npmrc%APPDATA%\npm 等多路策略定位 dsh;
    • 检查 <prefix>\node_modules\@deepseek-ai\dsh\lib\bin.js 与前端 dist。
  4. 检测通过 → 渲染层调用 start-harnessbackend.js 拉起后端并导航。
  5. 检测不通过 → 渲染层显示缺项列表和「下载并安装」按钮。

2.3 后端与插件装载

  • dsh web --port 0 让系统分配空闲端口,解析 stdout 中 dsh web: http://127.0.0.1:<端口> 得到真实地址。
  • 启动后端前,backend.js 会把内置的 dsh-connect-center UI 插件复制到 ~/.dsh/profiles/web/node_modules/dsh-connect-center,并加入 web profile 的 bundles, 这样官方 Web UI 才会出现「互联」「插件市场」和「插件安装」Tab。

2.4 互联渠道原理

  • channels.js 统一管理渠道的安装 / 启动 / 停止 / 切换账号 / 卸载 / 账号查看。
  • 渠道定义在 CHANNELS 数组:QQ Bot 为 dsh-profile 型(安装官方 npm 插件), WxClaw 为内置 dsh-wxclaw 本地插件。
  • WxClaw 插件(plugins/dsh-wxclaw/)是参照 QQ Bot 插件写的 Cordis 插件:
    • 未配置 token 时,调用微信 ilink Bot API 的 get_bot_qrcodeGET /ilink/bot/get_bot_qrcode?bot_type=3)显示二维码;
    • 轮询 get_qrcode_status?qrcode=<ticket> 直到扫码成功,拿到 token/botId 并持久化到 profile;
    • 轮询 getupdates 拉取微信消息,交给 dsh agent;
    • 监听 session/event,通过 sendmessage 把 dsh 回复发回微信(支持 context_token 24h 回复窗口)。
  • 渠道进程的 stdout/stderr 实时回传 Web UI,二维码、绑定状态、账号信息均在界面展示。

2.5 插件市场与插件安装原理

  • 插件市场marketplace.js 抓取 dshplugin.store 首页 HTML,用正则解析插件卡片 (名称、作者、仓库、简介、star、分类);失败时用 sitemap.xml 兜底。 安装时抓取插件详情页,解析 dsh plugin --profile <profile> add <spec> 命令并执行。 client-only 插件(无 dsh.bundle)自动往 web profile 的 cordis.patch.yml 写入 insert 入口行,让 dsh-client-modules 能发现其 dsh.client
  • 插件安装 Tabplugin-install.js 负责:
    • 本地导入:Electron 文件选择框 → dsh plugin --profile web add <本地路径>
    • 链接安装:GitHub 仓库先下载官方 tarball 到 ~/.dsh/plugin-tarballs/,再 dsh plugin add <本地.tgz>,避免依赖 git;
    • 历史记录:~/.dsh/plugin-install-history.json,可查看信息、删除(dsh plugin remove)。
  • 安装 / 卸载完成后,主进程自动重启 dsh web 后端并刷新窗口,使插件立即生效。

2.6 技能 / 技能市场原理

  • skills.js 扫描标准 skill 根目录(~/.dsh/skills~/.agents/skills~/.dsh/.system/skills)。
  • 技能市场通过 GitHub API 读取仓库目录树,识别 skills/ 下的 SKILL.md / .md,拉取 frontmatter 展示,并下载到 ~/.dsh/skills

2.7 定时任务原理

  • scheduler.js 每 30 秒检查一次任务是否到期。
  • 到点后调用 dsh headless:dsh --profile headless --patch <临时配置> "提示词"
  • 临时 patch 可覆盖模型、权限等配置;前置脚本输出会附加到提示词。
  • 运行记录写入 ~/.dsh/scheduled-task-runs.jsonl

2.8 会话修复原理

  • session-repair.js 内嵌一个 Python 修复脚本。
  • 脚本解压 .zstd 会话日志,按事件 seq 校验连续性,删除重复/乱序记录,必要时对尾部 seq 重编号,再重新压缩为 header + body 两个 zstd frame。
  • 修复前自动备份原文件。

3. 使用方法

3.1 开发运行

cd D:\Python\开发\harness
npm install
npm start

国内网络加速:

$env:ELECTRON_MIRROR='https://npmmirror.com/mirrors/electron/'
npm install --registry=https://registry.npmmirror.com

也可以直接双击仓库根目录的 启动桌面端.cmd(优先启动 dist\win-unpacked 打包版;不存在时自动装依赖并 npm start)。

3.2 打包

cd D:\Python\开发\harness
npm run dist

产物在 dist\

文件说明
DeepSeek Harness-Setup-0.1.0.exeNSIS 安装包,可分发
win-unpacked\DeepSeek Harness.exe免安装版,可直接双击运行

本项目仓库已内置 installer.nsi(带图标、快捷方式、注册表卸载信息)。如需完全由 electron-builder 重新生成,请设置 ELECTRON_BUILDER_BINARIES_MIRROR 后执行 npm run dist

3.3 使用打包版

方式 A:安装包(推荐)

  1. 双击 DeepSeek Harness-Setup-0.1.0.exe
  2. 选择安装目录;
  3. 安装完成后双击桌面「DeepSeek Harness」图标启动。

方式 B:免安装版

  1. win-unpacked 整个文件夹拷到任意位置;
  2. 双击 DeepSeek Harness.exe
  3. 可右键 → 发送到 → 桌面快捷方式。

3.4 使用互联(QQ Bot / WxClaw)

  1. 启动桌面端,进入 Harness Web 界面。
  2. 打开「设置 → 互联」。
  3. 在渠道卡片上点「安装到 dsh profile」(WxClaw 会自动安装内置插件)。
  4. 点「启动并扫码绑定」,按提示扫码:
    • QQ Bot:手机 QQ 扫码;
    • WxClaw:微信扫码。
  5. 绑定成功后即可通过对应渠道与 dsh 对话;已绑定账号会在应用启动后自动上线。
  6. 「账号」弹窗可查看 / 删除 / 切换已绑定账号;「卸载」可移除渠道。

3.5 使用插件市场 / 插件安装

  • 插件市场设置 → 插件市场,搜索 / 分类 / 安装 / 卸载 / 打开 GitHub。
  • 插件安装设置 → 插件 → 插件安装,本地导入或粘贴 GitHub 链接安装。

3.6 使用技能 / 技能市场

  • 技能设置 → 技能,查看已安装技能;「安装」页支持本地导入或 GitHub 链接安装。
  • 技能市场设置 → 技能 → 技能市场,输入市场源(如 https://github.com/anbeime/skill/tree/main/skills),保存后浏览并下载技能。

3.7 使用定时任务

  • 进入 设置 → 定时任务,新建任务并配置频率、提示词、模型、权限、技能、前置脚本。
  • 任务到点后自动执行;也可点「立即运行」手动触发。
  • 运行记录和完整日志可在「运行记录」中查看或删除。

3.8 使用会话修复

  • 进入 设置 → 会话修复,点「扫描损坏会话」。
  • 出现损坏列表后点「修复」,应用会自动备份并修复历史记录。

4. 数据存放位置

  • dsh profile / 会话数据C:\Users\<用户名>\.dsh(与官方 CLI 共用)。
  • 应用自管运行时(检测不到全局 Node/dsh 时创建):<Electron userData>\runtime\
  • 插件安装 Tab 的 tarball~/.dsh\plugin-tarballs\
  • 插件安装 Tab 的历史记录~/.dsh\plugin-install-history.json
  • 技能~/.dsh\skills\~/.agents\skills\
  • 技能市场源~/.dsh\skill-market-source.json
  • 定时任务配置~/.dsh\scheduled-tasks.json
  • 定时任务运行记录~/.dsh\scheduled-task-runs.jsonl
  • 会话修复脚本<Electron userData>\session-repair\session-repair.py
  • 外观等 UI 偏好:浏览器 localStorage(Harness 页面内)。

5. 常见情况与处理

现象原因处理
启动页长时间停在「正在启动」dsh web 首次初始化较慢等 30 秒;失败会显示错误日志
提示 Node.js 版本过低系统 Node < 22.5.0点「下载并安装」,应用自管便携 Node
检测不到已安装的 dshnpm 全局 prefix 不在默认位置已做 PATH/.npmrc/%APPDATA%\npm 多路兜底;仍失败点「下载并安装」
下载慢默认 npmmirror检查网络,可改 src/main/installer.jsNPMMIRROR
SmartScreen 提示安装包未签名点「更多信息 → 仍要运行」;正式分发建议签名
双击第二次没反应单实例锁属正常现象,窗口会被聚焦
插件市场加载慢dshplugin.store 首页较大稍等;失败会自动用 sitemap 兜底
插件安装后不生效未重启 dsh web / client-only 未写入口行当前版本已自动重启并写入口行;如仍不生效发日志
WxClaw 收不到消息未绑定 / token 失效 / 网络问题在「账号」中删除后重新扫码;查看渠道日志
快捷方式图标不显示自定义图标Windows 图标缓存重启资源管理器或注销重登;安装包和 exe 已内嵌图标
历史记录报错 corrupt session log: seq gap进程被强制结束导致日志重复/乱序打开「设置 → 会话修复」一键修复;平时避免强杀 dsh/Electron

6. 源码目录说明

harness/
├─ package.json               # 项目元信息、scripts(start / dist)
├─ electron-builder.yml       # electron-builder 配置(NSIS、图标、electronDist)
├─ installer.nsi              # NSIS 安装脚本(图标、快捷方式、卸载注册表)
├─ 启动桌面端.cmd              # 双击启动脚本(优先打包版)
├─ README.md                  # 本文档
├─ VERSION.md                 # 本版本说明
├─ assets/
│  ├─ icon-source.svg         # 鲸鱼 SVG 源图标
│  ├─ icon.png                # 256×256 PNG(窗口/页面 logo)
│  ├─ icon.ico                # Windows 多尺寸图标(exe/安装包/快捷方式)
│  └─ icon-multi.ico          # 多尺寸 ICO 生成副本
├─ plugins/
│  └─ dsh-wxclaw/             # 内置 WxClaw 微信渠道插件(dsh Cordis 插件)
│     ├─ package.json
│     ├─ cordis.patch.yml
│     └─ dist/index.js
└─ src/
   ├─ main/                   # Electron 主进程
   │  ├─ main.js              # 入口:窗口、菜单(检查DSH更新/CC-TUI/帮助)、IPC、生命周期
   │  ├─ detector.js          # 环境检测
   │  ├─ installer.js         # 一键安装 Node/dsh
   │  ├─ backend.js           # dsh web 后端启动/停止 + 装载 dsh-connect-center
   │  ├─ channels.js          # 互联渠道管理(QQBot/WxClaw/账号/切换/卸载)
   │  ├─ marketplace.js       # 插件市场抓取/解析/安装/卸载
   │  ├─ plugin-install.js    # 插件安装 Tab:本地导入/链接安装/历史
   │  ├─ skills.js            # 技能列表/导入/链接安装/技能市场
   │  ├─ scheduler.js         # 定时任务存储/调度/headless 执行/日志
   │  ├─ session-repair.js    # 会话历史扫描与修复(内嵌 Python 脚本)
   │  └─ util.js              # 工具函数
   ├─ connect-plugin/         # dsh 设置页插件(复制为 dsh-connect-center)
   │  ├─ package.json
   │  ├─ cordis.patch.yml
   │  └─ lib/
   │     ├─ index.js          # 主机端 no-op
   │     └─ client.js         # 浏览器端:注册 互联 / 插件市场 / 插件安装 / 技能 / 定时任务 / 会话修复
   ├─ preload/
   │  ├─ preload.js           # contextBridge:file: 全量 API;127.0.0.1 暴露 connect/market/pluginInstall/skills/scheduler/repair
   │  └─ update-progress-preload.js  # DSH 更新进度窗口 preload
   └─ renderer/               # 启动页 UI(connect.html/connect.js 为历史遗留,当前菜单已不入口)
      ├─ index.html / renderer.js / styles.css
      ├─ cc-tui-progress.html / cc-tui-progress.js   # CC-TUI 安装进度窗口
      ├─ update-progress.html / update-progress.js   # DSH 更新进度窗口
      ├─ connect.html / connect.js

7. 开源说明

  • License:MIT。
  • 本项目为 DeepSeek Harness 的桌面壳与增强插件集,Harness 本体版权归 deepseek-ai/deepseek-harness 所有。
  • WxClaw 微信接口版权归微信 / ilink 平台所有,仅供个人学习与合规使用。