DSH Desk

August 18, 2026 · View on GitHub

Windows 10 / 11 桌面程序:把 DeepSeek Harness 的启动内嵌到程序里, 不再需要手动开 cmd 跑 dsh web,关闭/最小化窗口后自动隐藏到系统托盘, 服务持续运行,随时点托盘图标回来。

下载

👉 到 Releases 下载最新版本。

文件说明
DSH-Desk-v0.1.5-win32-x64.zip免安装便携版:解压后双击 DSH Desk.exe 即可运行,无需安装 Node.js

SHA-256 校验(与 release 中的 *.sha256 文件一致,防止下载损坏/被篡改):

Get-FileHash .\DSH-Desk-v0.1.5-win32-x64.zip -Algorithm SHA256

v0.1.5 校验值:68c605dc79dbff362f79e21b9bc67a1441025ffaa1725dafdcb42b4771b97285

功能

  • 🚀 内嵌启动:程序自动以隐藏方式启动 dsh --profile web(无任何 cmd 窗口,包括闪窗)
  • 🖥️ 内嵌界面:DSH Web 界面直接显示在程序窗口内(Chromium 内核)
  • 📌 托盘常驻:关闭窗口(✕)→ 隐藏到托盘,服务继续运行;最小化 → 常规最小化到任务栏;托盘右键菜单退出才真正停止
  • 🔄 智能附着:若 3080 端口已有一个 DSH 实例(如 Harness 会话),程序直接附着共用,不会重复启动
  • 🔁 一键重启:托盘菜单可随时重启 DSH 服务
  • 开机自启:托盘菜单勾选开关(写入 HKCU 注册表 Run 键)
  • 🌐 浏览器打开:需要时可在系统默认浏览器中打开界面
  • 🪟 多窗口:托盘菜单或任务栏右键「新建窗口」打开多个独立窗口,各自处理不同会话/任务,高效并行
  • 🎨 窗口配色:每个窗口网页内右下角调色板按钮(🎨),预设色板一键换色。 支持互斥跟随模式颜色随工作区 / 颜色随会话(按工作区/会话标题记忆颜色, 切换时自动换色并跨重启保留);两者都关闭时为窗口固定色(仅本次运行生效, 重启回归默认)。点选颜色不关闭菜单,点菜单外任意处关闭。多窗口一眼区分。
  • 🛠️ 首次自动部署:未部署 Harness 时弹窗一键自动安装(npx @deepseek-ai/dsh --profile web),取消即退出
  • 💰 用量监控:托盘菜单显示 DeepSeek 账户余额(官方 user/balance 接口,账户级) 与本次启动消费金额(按 Harness 会话存储中的实际 token 用量 × DeepSeek 官方峰谷计价 计算,只含本应用自身消耗,不受同账户其他 API Key 影响);「清零小计」把本次消费计数 重置为当前值重新统计;每 30s 自动刷新,也可手动刷新。
    • 计价口径:按事件发生时间选择计价版本——2026-08-17 00:00(北京时间)之前用官方旧价 (flash 命中 0.02 / 未命中 1 / 输出 2 元/百万 tokens);之后用官方峰谷新价 (高峰=北京时间 9-12、14-18,空闲为高峰一半,模型 deepseek-v4-flash / deepseek-v4-pro)。
    • 消费金额与平台网页按 key 的口径可能存在缓存计费与四舍五入的分毫级差异,仅供参考。
  • 🔔 系统通知:任务完成 / 启动成功 / 出错三类通知,托盘「通知」菜单可单独开关; 排队/插话队列挂起时不发"任务完成"通知;任务完成通知标题带对话名
  • 🎯 托盘状态图标:在线=右下角绿点、出错=红点、服务不在线/端口占用=图标灰化; 托盘右键改为二级菜单(服务 / 用量 / 机器人 / 通知),信息不再分散
  • 🤖 QQ 机器人远程控制(OneBot v11):接 go-cqhttp / NapCat / LLOneBot, 手机上远程对话、选择工作区/会话/模型、查用量与聊天记录、任务完成推送、排队与打断。 详见「QQ 机器人」章节

运行环境

  • Windows 10 / 11(x64)
  • 下载版:无需安装 Node.js
  • 从源码运行:Node.js ≥ 20(本机已验证 v24)

使用说明

操作行为
双击 DSH Desk.exe打开窗口并后台启动 DSH 服务(若 3080 已有实例则直接附着)
点窗口 ✕隐藏到系统托盘,服务继续跑
点最小化常规最小化到任务栏(不从任务栏消失)
单击托盘图标显示 / 隐藏主窗口
托盘菜单「新建窗口」打开一个新的独立窗口(可分别处理不同会话/任务)
任务栏右键「新建窗口」同上(跳转列表任务,多任务并行)
右键托盘图标状态行 + 菜单:显示/隐藏、新建窗口、浏览器打开、启动/停止/重启 DSH 服务、开机自启、查看日志、退出
托盘「退出 DSH Desk」停止由本程序启动的 DSH 服务进程树并退出;附着的外部实例不受影响
开机自启模式程序随登录后台启动,不弹窗口,服务就绪后常驻托盘

附着与冷启动:程序启动时先探测 127.0.0.1:3080——若已有 DSH 实例(比如 Harness 自身正在运行)则直接附着共用(托盘状态显示"已附着");若没有, 则由程序自己隐藏启动一个 dsh web 服务(冷启动,托盘状态显示"运行中")。

首次启动 DSH 服务会初始化 profile,界面加载需要几秒到几十秒。 等待期间窗口显示真实进度条(由真实事件驱动:进程启动 → 配置写入 → 端口监听 → 界面就绪,只前进不后退、不伪造百分比)+ 实时日志尾流 + 已等待计时。

QQ 机器人(OneBot v11)

用 QQ 远程操控 DSH:发消息对话、执行 dsh 斜杠命令(/plan /goal 等)、 选择工作区/会话/模型、查用量与聊天记录、接收任务完成推送,支持排队与打断。

接入步骤(二选一)

方式 A:QQ 官方机器人(AppID/AppSecret,推荐)——无需第三方客户端

  1. QQ 开放平台 创建机器人应用,启用「C2C 单聊」与「群聊 @消息」能力(C2C 需申请开通)。
  2. 拿到 AppIDAppSecret(没有静态 Token:程序用二者自动换取 access_token,2 小时有效自动续)。
  3. DSH Desk 托盘 → 机器人 → 配置… → 选「官方机器人」:填 AppID/AppSecret,可勾选沙箱模式, 白名单(user_openid/group_openid)可选(留空=允许所有能联系到机器人的用户;填了则未命中只通知主机)。 「服务器 IP 白名单」与 WebSocket 模式无关,无需配置。
  4. 测试:先在沙箱里跑通(在开放平台把「开发体验号码」加为测试用户),再切正式环境。

方式 B:OneBot(go-cqhttp / NapCat / LLOneBot)——任意 QQ 号私聊+群聊

  1. 部署一个 OneBot v11 实现并登录机器人,开启 WebSocket 服务(正向 WS), 记下地址(默认 ws://127.0.0.1:6700)与访问令牌(如有)。
  2. 配置… → 选「OneBot」:填 WS 地址、令牌,白名单必填(QQ 号/群号)。
  3. 未配置白名单时机器人拒绝启动(安全必需)。

指令

首次使用:新频道(未绑定、未欢迎过)发第一条消息会收到自动欢迎(简介 + 快速开始)。 之后未绑定时回简短提示;已绑定后普通文本即对话。任何状态下机器人都有自动回复。

输入行为
普通文本发给当前绑定会话(忙时自动排队)
/plan … /goal …原样透传为 dsh 斜杠命令执行
/help完整帮助(快速开始 / dsh 斜杠命令 / 指令表 / 说明)
/ws / /ses列工作区/会话并选择绑定。官方机器人模式下列表自带可点击按钮(点按钮即选择);也支持 /ws <名>/ses <名或ID前缀> 打字选择。/ses 只列当前工作区自己的会话
/status桥接/dsh 状态
/usage余额 + 本次消费(含 Token 明细)
/setting查看/修改设置(闲置自动退出等)
/model / /model <provider>/<model>模型列表 / 选择
/history [n]最近 n 条聊天记录
/mode 纯对话|全部回复/历史渲染模式(纯对话=仅文本;全部=含工具/思考)
/stop打断当前生成(队列中未开始的会自动继续)
/queue当前排队状态

安全

  • 白名单必需:只响应配置的 QQ 号/群;可选手令解锁。
  • 智能体可执行工具(bash 等),机器人等于远程终端——只绑可信账号,用完可关。
  • 回复按 QQ 单条上限自动分段;超长截断提示用 /history 看完整。

致谢

  • ChengChe106:计费口径与价格表参考其开源项目 dsh-session-cost(会话费用估算插件),特此鸣谢。

从源码运行(开发者)

:: 首次安装(国内镜像已配置在 .npmrc)
npm install

:: 启动
npm start

也可以直接双击启动脚本(无需控制台窗口):

脚本说明
启动 DSH Desk(推荐).vbs推荐双击这个:无控制台闪窗,正常显示主窗口
启动 DSH Desk(备用).bat备用方案:启动瞬间会有一个控制台窗口闪一下

正常使用双击「推荐」那个即可。若系统禁用了 VBScript(企业安全策略等) 或双击 .vbs 没反应,再改用「备用」。

开发自检

命令作用
npm run smoke环境自检:DSH 启动器是否就位、3080 端口状态(退出码 0=正常 / 1=缺启动器 / 2=脚本异常)
npm run check源码语法检查(全部 JS 文件)
npm run gen:icon重新生成图标到 assets/

运行日志

DSH 子进程输出与程序运行日志保存在:

%APPDATA%\DSH Desk\logs\

排障

  • 启动失败时会弹窗显示诊断信息(Node 路径、DSH 启动器、DSH_HOME、日志位置), 可直接点「打开日志目录」查看 dsh-*.log(含 dsh 子进程的完整输出)。
  • 界面加载失败会自动重试最多 8 次。
  • 3080 被其他程序占用时自动改用随机端口。
  • 程序自身崩溃(初始化异常)会写入 crash.log 并弹窗提示。

常见问题

  • 端口 3080 被其他程序占用:程序会自动改用系统分配的随机端口, 并解析实际地址加载;托盘提示与「浏览器打开」均使用真实地址。
  • 首次启动未部署 Harness:程序检测不到 DSH 启动器时弹出对话框, 可选「自动安装」(自动运行 npx @deepseek-ai/dsh --profile web 部署并接管服务) 或「取消」(退出程序)。开机自启模式下检测不到则直接静默退出。
  • 打包安装版npm run dist(生成 NSIS 安装包 + 便携版到 dist/)。 首次运行需下载打包工具(electron、NSIS 等)。若报错 unable to verify the first certificate,先执行 set NODE_OPTIONS=--use-system-ca; 下载慢可执行 set ELECTRON_BUILDER_BINARIES_MIRROR=https://npmmirror.com/mirrors/electron-builder-binaries 走 npmmirror 镜像(结尾不要加斜杠)。

项目结构

DSH_DESK/
├── src/
│   ├── main.js          # Electron 主进程:窗口、托盘、自启、生命周期、机器人桥接接线
│   ├── dsh-manager.js   # DSH 服务管理器:隐藏启动/附着/重启/关停 + 阶段进度事件
│   ├── tray.js          # 托盘图标与右键菜单(服务/用量/机器人/通知)
│   ├── preload.js       # 加载页事件桥(stage/log/ready/failed → 渲染进程)
│   ├── im-config.html   # 机器人配置小窗口
│   ├── im/
│   │   ├── dsh-api.js        # dsh 本地 RPC 客户端(unary + mux WS 事件流)
│   │   ├── bridge.js         # 桥接核心:消息分发 / 命令透传 / 排队 / 打断 / 任务完成推送
│   │   ├── session-mapper.js # IM 频道 ↔ 工作区/会话 绑定(持久化)
│   │   ├── render.js         # 会话事件 → QQ 文本渲染(纯对话/全部)
│   │   └── adapters/
│   │       ├── onebot.js     # OneBot v11 适配器(WS 客户端,白名单 + @过滤)
│   │       └── qq-official.js# QQ 官方机器人适配器(AppID/AppSecret/Token,官方网关直连)
│   └── loading.html     # 启动进度页(真实阶段进度条 + 日志尾流 + 计时)
├── test/
│   ├── im-dsh-api.test.js      # dsh RPC 客户端(mock dsh 协议)
│   ├── im-render-mapper.test.js# 渲染 + 绑定持久化
│   ├── im-bridge.test.js       # 桥接集成(mock OneBot + mock dsh)
│   └── im-qq-official.test.js  # 官方机器人适配器(mock 网关 + mock API)
├── scripts/
│   ├── gen-icon.mjs     # 图标生成(纯 Node,零依赖)
│   ├── smoke.js         # 环境自检(npm run smoke)
│   └── run-electron.js  # electron 启动包装(移除 ELECTRON_RUN_AS_NODE)
├── assets/              # 生成的图标
├── 启动 DSH Desk(推荐).vbs   # 静默启动器(推荐双击)
├── 启动 DSH Desk(备用).bat   # 备用启动器(会闪一下控制台)
├── .npmrc               # npm 国内镜像配置
└── package.json

技术要点

  • DSH 启动:spawn(node, [dsh-launcher, '--profile', 'web', ...], { windowsHide: true })
  • 端口探测:轮询 http://127.0.0.1:3080/,识别 DSH 特征(__DSH_BOOT__
  • 优雅退出:taskkill /pid <pid> /T /F 清理 DSH 进程树(子代理、工作线程等)
  • 单实例:app.requestSingleInstanceLock() 防止重复启动
  • 自启:HKCU ...\CurrentVersion\Run 注册表键