deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:241793/DSH-Win-GUI
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
基于 Electron 的 deepseek-harness Windows 桌面启动器。它不重新实现 Harness,而是把官方 dsh web 服务包装成一个双击即开、缺组件自动下载安装的桌面程序,并在此基础上提供互联渠道、插件市场、插件安装、技能管理、技能市场、定时任务、会话修复等增强功能。可当机器人对话使用
官方 CLI:
@deepseek-ai/dsh(dsh命令)。本项目是官方预留 Electron 壳形态的实用实现:Electron 主进程负责检测、安装、拉起后端,窗口加载官方 Web UI。
使用教程:下载安装即可https://github.com/241793/DSH-Win-GUI/releases/download/0.1.0/DeepSeek.Harness-Setup-0.1.0.exe
@deepseek-ai/dsh)、Web 前端资源。@deepseek-ai/dsh 到应用自管目录(优先复用全局已装的 dsh);dsh web --port 0,解析真实端口,把窗口导航到 http://127.0.0.1:<端口>。taskkill /T /F 清理后端进程树。cc-tui / tui 两种 profile,且会校验是否真正挂载了 dsh-cc-tui bundle);未安装或历史 dsh-tui 包损坏则自动安装(优先 npmmirror 的 dsh-cc-tui 包,失败时回退 GitHub tarball)并显示进度,已安装则打开系统终端里的 dsh --profile cc-tui 原生交互界面,方便 dsh web 报错时通过终端排查修复。启动桌面端后,打开 Harness 界面「设置 → 互联」即可管理聊天渠道:
@tencent-connect/dsh-qqbot 到 qqbot profile,一键启动并扫码绑定;显示已连接机器人信息(昵称 / Bot ID / AppID)。dsh-wxclaw 插件,使用微信 ilink Bot API(https://ilinkai.weixin.qq.com)扫码绑定微信账号;微信发消息给该账号,dsh 接收并回复。dsh plugin remove 或删除自管目录)。https://www.dshplugin.store/ 拉取插件列表(首页 HTML 解析,sitemap 兜底)。dsh plugin add/remove,安装完成后自动重启 dsh web 生效;官方「插件」设置页新增「插件安装」Tab:
~/.dsh/skills 下的 skill 支持删除。SKILL.md 的文件夹或单个 .md 文件,复制到 ~/.dsh/skills。SKILL.md / skills/ 目录,安装到 ~/.dsh/skills。https://github.com/anbeime/skill/tree/main/skills。~/.dsh/skills。~/.dsh/skill-market-source.json。dsh --profile headless --patch <临时配置> "提示词"。~/.dsh/scheduled-task-runs.jsonl,支持查看和删除。~/.dsh/skills/scheduled-task-management 写入说明 skill,让 dsh 知道桌面端具备定时任务功能。~/.dsh/sessions 下所有 session.jsonl.zstd。python 与 zstandard 模块;应用启动时会把修复脚本释放到 userData 目录。assets/icon.ico / assets/icon.png。┌────────────────────────────────────────────────────────┐
│ 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:<端口>)
app.requestSingleInstanceLock() 防重复打开。detect-harness。detector.detectAll():node,再查常见安装目录);userData/runtime/node 下递归找 node.exe);npm prefix -g、PATH 目录扫描、.npmrc、%APPDATA%\npm 等多路策略定位 dsh;<prefix>\node_modules\@deepseek-ai\dsh\lib\bin.js 与前端 dist。start-harness → backend.js 拉起后端并导航。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。channels.js 统一管理渠道的安装 / 启动 / 停止 / 切换账号 / 卸载 / 账号查看。CHANNELS 数组:QQ Bot 为 dsh-profile 型(安装官方 npm 插件),
WxClaw 为内置 dsh-wxclaw 本地插件。plugins/dsh-wxclaw/)是参照 QQ Bot 插件写的 Cordis 插件:get_bot_qrcode(GET /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 回复窗口)。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。plugin-install.js 负责:dsh plugin --profile web add <本地路径>;~/.dsh/plugin-tarballs/,再
dsh plugin add <本地.tgz>,避免依赖 git;~/.dsh/plugin-install-history.json,可查看信息、删除(dsh plugin remove)。skills.js 扫描标准 skill 根目录(~/.dsh/skills、~/.agents/skills、~/.dsh/.system/skills)。skills/ 下的 SKILL.md / .md,拉取 frontmatter 展示,并下载到 ~/.dsh/skills。scheduler.js 每 30 秒检查一次任务是否到期。dsh --profile headless --patch <临时配置> "提示词"。~/.dsh/scheduled-task-runs.jsonl。session-repair.js 内嵌一个 Python 修复脚本。.zstd 会话日志,按事件 seq 校验连续性,删除重复/乱序记录,必要时对尾部 seq 重编号,再重新压缩为 header + body 两个 zstd frame。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)。
cd D:\Python\开发\harness
npm run dist
产物在 dist\:
| 文件 | 说明 |
|---|---|
DeepSeek Harness-Setup-0.1.0.exe |
NSIS 安装包,可分发 |
win-unpacked\DeepSeek Harness.exe |
免安装版,可直接双击运行 |
本项目仓库已内置
installer.nsi(带图标、快捷方式、注册表卸载信息)。如需完全由 electron-builder 重新生成,请设置ELECTRON_BUILDER_BINARIES_MIRROR后执行npm run dist。
方式 A:安装包(推荐)
DeepSeek Harness-Setup-0.1.0.exe;方式 B:免安装版
win-unpacked 整个文件夹拷到任意位置;DeepSeek Harness.exe;设置 → 插件市场,搜索 / 分类 / 安装 / 卸载 / 打开 GitHub。设置 → 插件 → 插件安装,本地导入或粘贴 GitHub 链接安装。设置 → 技能,查看已安装技能;「安装」页支持本地导入或 GitHub 链接安装。设置 → 技能 → 技能市场,输入市场源(如 https://github.com/anbeime/skill/tree/main/skills),保存后浏览并下载技能。设置 → 定时任务,新建任务并配置频率、提示词、模型、权限、技能、前置脚本。设置 → 会话修复,点「扫描损坏会话」。C:\Users\<用户名>\.dsh(与官方 CLI 共用)。<Electron userData>\runtime\。~/.dsh\plugin-tarballs\。~/.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。| 现象 | 原因 | 处理 |
|---|---|---|
| 启动页长时间停在「正在启动」 | dsh web 首次初始化较慢 | 等 30 秒;失败会显示错误日志 |
| 提示 Node.js 版本过低 | 系统 Node < 22.5.0 | 点「下载并安装」,应用自管便携 Node |
| 检测不到已安装的 dsh | npm 全局 prefix 不在默认位置 | 已做 PATH/.npmrc/%APPDATA%\npm 多路兜底;仍失败点「下载并安装」 |
| 下载慢 | 默认 npmmirror | 检查网络,可改 src/main/installer.js 的 NPMMIRROR |
| SmartScreen 提示 | 安装包未签名 | 点「更多信息 → 仍要运行」;正式分发建议签名 |
| 双击第二次没反应 | 单实例锁 | 属正常现象,窗口会被聚焦 |
| 插件市场加载慢 | dshplugin.store 首页较大 | 稍等;失败会自动用 sitemap 兜底 |
| 插件安装后不生效 | 未重启 dsh web / client-only 未写入口行 | 当前版本已自动重启并写入口行;如仍不生效发日志 |
| WxClaw 收不到消息 | 未绑定 / token 失效 / 网络问题 | 在「账号」中删除后重新扫码;查看渠道日志 |
| 快捷方式图标不显示自定义图标 | Windows 图标缓存 | 重启资源管理器或注销重登;安装包和 exe 已内嵌图标 |
| 历史记录报错 corrupt session log: seq gap | 进程被强制结束导致日志重复/乱序 | 打开「设置 → 会话修复」一键修复;平时避免强杀 dsh/Electron |
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
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。