deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
(本项目完全由DeepSeek Harness搭载Deepseek模型通过Vibe coding得到)
DSHL 是 DeepSeek Harness(DSH)的 Windows 托盘启动器:系统托盘常驻、一键启动/停止/接管 DSH Web 服务、消息通知(托盘闪烁)、开机自启、运行环境自动检测与一键安装、自动更新。

![]() |
![]() |
dshl-<版本>.exe(NSIS 安装包)。~/.dsh(配置、日志、托管运行时、会话数据)。主页面"余额"卡片只显示余额金额(绿=可用/红=不可用;悬停显示明细),右侧 ↻ 立即刷新、充值 / 用量查询(打开 DeepSeek 开放平台 https://platform.deepseek.com/usage 充值/用量页)(cc-switch 风格,实现参照 cc-switch:GET {接口}/user/balance + Bearer 鉴权):
~/.dsh/.credentials.yaml(DEEPSEEK_API_KEY)与 ~/.dsh/settings.yaml(llm-deepseek.baseURL),面板加载即查询一次,此后每 3 分钟自动刷新;api.deepseek.com);点 "测试并保存"——连通(正确获取到余额)即自动保存并立即生效;"清除已保存"回到自动读取 DSH 配置;左上角 ← 返回主页;dshl/
├── main.js # 主进程:托盘/闪烁/服务管理/通知/自启/自检/IPC/自动更新接线
├── preload.js # 渲染进程安全桥(contextIsolation + sandbox)
├── browser-preload.js # 独立窗口(WebContentsView)预加载桥
├── updater.js # electron-updater 接入(GitHub Releases)
├── env-detect.js # 环境探测:Node 运行时 + DSH 四种安装形态 + 通知插件(输出 spawn 计划)
├── env-install.js # 一键安装引擎:托管 Node(官方发行包)+ DSH(npm 前缀安装)+ 插件拷贝,进度/日志/取消
├── ui-src/ # 面板源码(可编辑):index.html / styles.css / app.js(含"运行环境"页)
├── wwwroot/ # 组装产物(ui-src 拷贝 + 鲸鱼路径内联),由 build:assets 生成,随仓库提交
├── assets/ # 托盘图标(ico 等)+ plugins/dsh-notify.mjs(随包插件)
├── dshl.vbs # 开发期隐藏窗口启动脚本(可选)
└── tools/
├── build-assets.mjs # 资源生成脚本(需 sharp)
├── dev.mjs # 开发热更新守护(npm run dev):ui-src 变化重建产物+面板热刷新、主进程文件变化自动重启
├── envcheck.cjs # 脱离 Electron 的独立环境探测脚本(npm run envcheck,CI/排障用)
└── install-smoke.cjs # 安装引擎冒烟测试(plugin = 快;dsh = 真实 npm 安装到临时 HOME)
cd dshl
npm install # 安装依赖(Electron + electron-builder + semver + electron-updater)
npm run build:assets # 首次/修改 ui-src 后需要(sharp 可随 DSH profile 提供:npm i -D sharp)
npm start # 开发模式运行(或双击 dshl.vbs 隐藏启动;加 --panel 启动后直接弹出启动器面板)
npm run dev # 开发热更新:改 ui-src → 自动重建产物+面板自动刷新;改主进程文件 → 自动重启 electron
npm run selftest # 自检:临时 DSH_HOME + 端口 3999,不影响正在运行的服务
npm run envcheck # 独立环境探测(退出码 0 就绪 / 1 缺失 / 2 错误)
npm run dist:win # 打包 NSIS 安装包 → dist/dshl-<版本>.exe(--publish never,不自动上传)
npm run release # 一键发布:build:assets + dist:win + 创建 GitHub Release 并上传三件套
启动器面板内置 DevTools 入口:F12 或面板内右键 → 打开开发者工具(调试UI)(npm run dev 下热更新已就绪:改 ui-src/ 保存即自动刷新面板):
ui-src/styles.css 保存,热更新会自动带上。dshl/ui-src → 之后在 DevTools 里改 Styles/Sources 会直接写回 ui-src 文件(index.html 的鲸鱼占位符在 ui-src 中保持 __WHALE_PATH__ 原样即可,产物组装会自动内联),配合热更新即"改哪存哪、面板自动刷新"。wwwroot/ 下文件(main.js 的 fs.watch 同样会触发面板刷新),但注意下次 build:assets / npm run dev 会用 ui-src 覆盖 wwwroot,最终改动要落回 ui-src。用 VS Code 打开 dshl 文件夹即可,已内置 .vscode/launch.json(Ctrl+Shift+D 选目标后 F5):
main.js、updater.js、dsh-update.js 等)可直接打断点,启动后自动弹出启动器面板。wwwroot/app.js 等渲染脚本里打断点(内置 js-debug,无需装扩展)。npm run dev 都生效):改 ui-src/ 任意文件 → 自动重建 wwwroot → 面板自动刷新,无需重启;改主进程文件(main.js、preload.js、updater.js、dsh-update.js、env-detect.js、env-install.js、balance.js)→ npm run dev 会自动重启 electron(F5 下改完重按 F5 即可)。npm run dev 会打印警告。发布(tools/release.mjs):前置 = 工作区干净、已 git push origin main、安装并登录 GitHub CLI(winget install GitHub.cli && gh auth login)。脚本会校验 tag 不存在、产物齐全后 gh release create v<版本> dshl-<版本>.exe .blockmap latest.yml;客户端 electron-updater 依据 latest.yml 自动更新。用法:npm run release(说明自动取上一 tag 以来的提交列表),或 npm run release "v1.0.7 更新内容:\n- 第一条\n- 第二条"(换行用字面 \n,真实换行会被 npm/cmd 批处理截断)。
面板"运行环境"页负责 Node.js 与 DeepSeek Harness 的检测与安装,首次运行环境未就绪时会自动打开该页引导。
检测(env-detect.js,优先级第一个可用者胜出):
nodePath 配置 → 托管目录(~/.dsh/dshl-runtime/node/<ver>/)→ PATH 上的 node;版本门槛 = DSH 的 engines(默认 ^22.19.0 || >=24.0.0),不满足显示"版本过低"并引导托管安装。harnessRoot 配置或默认 E:\deepseek-harness,需已构建出 apps/cli/lib/bin.js(未构建 → 提示 pnpm install && pnpm run build,期间若有其他可用安装则自动回退并在构建完成后自动优先源码版);npm i -g @deepseek-ai/dsh(扫常见全局 node_modules 目录);npx @deepseek-ai/dsh web 装过的(扫 _npx/*/node_modules/@deepseek-ai/dsh,取最高版本);启动器直接 spawn 缓存里的 JS 入口,不再调用 npx(避免 hash 目录漂移导致 profile 链接断裂),也不会重复下载;~/.dsh/dshl-runtime/dsh/。~/.dsh/plugins/dsh-notify/dsh-notify.mjs 是否存在。一键安装(env-install.js,全程零管理员权限、无需预装任何东西):
~/.dsh/dshl-logs/install.log(1MB 轮转),支持取消 / 重试;面板关闭安装不中断,重开自动恢复进度显示;nodejs.org/dist,自动选择 nodeMajor(默认 22)的最新版;下载失败自动回退 npmmirror 镜像;官方 SHASUMS256.txt 校验),自带 npm,解压到托管目录;install --prefix ~/.dsh/dshl-runtime/dsh @deepseek-ai/dsh@<dshVersion>(registry 失败自动回退 npmmirror),完成后 --version 验证;lib/bin.js,统一 web --host 127.0.0.1 --port 3080)。排查:npm run envcheck(脱离 Electron 的探测脚本,退出码 0/1/2);安装日志见"运行环境"页或 install.log。
~/.dsh/dshl/config.json(首次运行自动生成):
{
"theme": "light",
"notify": true,
"useSystemBrowser": false,
"autoRestart": true,
"tabsEnabled": false,
"port": 0,
"webWindowWidth": 0,
"webWindowHeight": 0,
"webWindowMaximized": false,
"webWindowX": null,
"webWindowY": null,
"harnessRoot": "",
"nodePath": "",
"dshVersion": "0.1.0-rc.6",
"nodeMajor": 22,
"nodeMirror": "",
"npmRegistry": "",
"dshUpdateCheckedAt": 0,
"panelHideNotified": false,
"balanceApiKey": "",
"balanceBaseUrl": ""
}
webZoom 不入配置:对话界面缩放(50–300,默认 = 独立窗口当前缩放),控制独立 WebUI 窗口;窗口内 Ctrl+滚轮按 5% 一格调整并实时同步此设置,调整时窗口中央显示半透明缩放值(末次调整 1 秒后淡出)。~/.dsh/dshl-logs/feedback/)。通道地址随安装包内置(assets/feishu-webhook.txt,.gitignore 排除不进仓库;webhook 仅能向指定群发文本消息,泄露可随时在群设置重置);界面不提供改地址入口,作者换群时改 ~/.dsh/dshl/config.json 的 feedbackWebhook 字段或重新打包即可;用户侧无需任何配置与邮箱客户端。dshl.log 与 server.{out,err}.log 超过 1MB 自动转存 .1/.2/.3,保留最近 3 份。useSystemBrowser(设置页"使用系统浏览器打开DSH"):false(默认)时"打开 DeepSeek Harness"走托盘自管的独立窗口(复用同一个;点 ✕ 只隐藏到后台继续运行,托盘退出才真正关闭;服务就绪自动刷新错误页);true 时交给系统默认浏览器。nativeTheme.themeSource 落地,页面内 prefers-color-scheme 一并跟随)。harnessRoot:DSH 仓库根目录(源码版)。缺省 Windows 用 E:\deepseek-harness。nodePath:Node 可执行文件绝对路径(自动探测失败时手动指定)。dshVersion:一键安装锁定的 DSH 版本(默认 0.1.0-rc.6;改 latest 可装最新)。DSH 自动更新成功后会自动置为 latest。nodeMajor:托管 Node 的主版本号(默认 22,即自动装 22.x LTS 最新版)。nodeMirror:Node 发行包下载源覆盖(默认空 = nodejs.org 官方源,失败自动回退 npmmirror;可填镜像地址)。npmRegistry:npm 源覆盖(默认空 = npm 官方源,失败自动回退 npmmirror;可填镜像地址)。balanceApiKey:余额查询自定义 API Key(默认空 = 自动读 DSH 的 DEEPSEEK_API_KEY)。balanceBaseUrl:余额查询自定义接口地址(默认空 = 自动读 DSH 的 llm-deepseek.baseURL,其次官方 api.deepseek.com)。dshUpdateCheckedAt:DSH 自动更新上次检查的时间戳(内部记账,自动维护)。panelHideNotified:关闭启动器面板时"已最小化到托盘"的引导通知是否已提示过(只弹一次,之后静默缩到托盘;"恢复默认设置"会复位重新提示)。启动器静默保持 DeepSeek Harness 为最新版,全程无需用户确认(与启动器自身的"检查更新"相互独立):
dshUpdateCheckedAt 落盘防频繁请求 npm);npm view @deepseek-ai/dsh version 对比已安装版本(registry 失败自动回退 npmmirror),有新版本则按安装形态自动升级:npm install --prefix 覆盖旧版,进度/日志进安装日志),完成后自动重启服务;npm update -g @deepseek-ai/dsh(registry 回退同上),完成后自动重启服务;npm exec 预热新版本进缓存(检测按最高版本选中),完成后自动重启服务;git pull && pnpm run build,构建完成后重启服务生效);<harnessRoot>/apps/cli/lib/bin.js;全局/npx/托管 = 各自包内 lib/bin.js),统一参数 web --host 127.0.0.1 --port <服务端口(默认 3080,设置页可改)>(隐藏窗口,日志写入 ~/.dsh/dshl-logs/server.{out,err}.log)。dsh-notify 插件的 dropbox(~/.dsh/dshl-logs/notify/*.json,插件已同步使用 dshl-logs)。~/.dsh/dshl-logs/dshl.log。package.json 的 version(如 1.0.5),提交并推送;npm run dist:win(构建 NSIS 安装包与更新元数据,产物在 dist/);v<版本> 标签查找):gh release create v1.0.5 dist/dshl-1.0.5.exe dist/latest.yml dist/dshl-1.0.5.exe.blockmap --title "v1.0.5" --notes "更新说明…"
已安装用户下次启动会自动检测到新版本并后台下载,退出重启即完成升级。
更新机制依赖
build.publish(provider=github)生成的app-update.yml(已随安装包内置)与 Release 中的latest.yml;两者版本一致才能生效。
npm start)通知来源显示为 "Electron";安装版显示产品名。assets/deepseek-color.svg,品牌蓝 #4D6BFE,由 build:assets 生成各尺寸),深浅色主题下都清晰,不再做黑白切换。build.win.certificateFile)。assets/plugins/dsh-notify.mjs 由 DSH 插件生态提供,与启动器一并分发。CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。