返回目录
Agent 与会话 完整应用

dsh-ready-gui

itchenshi/dsh-ready-gui

DeepSeek Harness 桌面壳 —— 内嵌 Web UI、自动保持最新引擎、自带数据目录管理与系统托盘。

Stars
3
Forks
0
Issues
1
更新
今天

PROJECT TOPICS

项目标签

PROJECT README

README

DSH Ready GUI

DeepSeek Harness(DSH)的 Windows 桌面壳:装上就有界面,不用碰命令行。

English 中文 license release stars [platform]() GitHub Gitee GitCode

DSH 本体是一套开源 Agent 框架(@deepseek-ai/dsh),官方只给命令行和网页。这个壳把它装进一个 原生窗口:引擎它自己装、自己升级,数据在你自己手里,关掉就是托盘里的一个图标。

打开就能用

你想要 这里怎么做
不想敲命令 双击应用图标就完事。引擎由壳自己下载安装(首次 1–2 分钟,状态页有进度)
不想管升级 每次启动都自动检查,默认「问你要不要更新」;DSH Ready GUI 自己有新版也会通知你
不想配模型 装好内置插件,在「设置窗口 → 第三方插件」勾一下就有:模型余量、会话续接、OpenCode Go 路由、按键设置
不想丢会话 重启后自动回到你上次那个对话(内置「会话续接」)
不想被人乱看 壳只监听本机回环地址;插件自己的 HTTP 路由都开了鉴权,裸 curl 拿不到你的用量和余额
想搬走数据 数据目录可切换(默认跟随系统 ~/.dsh),切换时问你要不要一起搬,会话记录跟着走

四个内置插件各自也是独立仓库(可以单独装到别的 DSH 宿主):

插件 一句话 仓库
模型余量 dsh-model-surplus 会话标题右侧显示当前模型的用量 / 账户余额 仓库
会话续接 dsh-gui-last-session 重启后回到上次那个对话 仓库
OpenCode Go 路由 dsh-opencode-go-path 自动补齐 DeepSeek V4.1 模型 + 附加会话头,修 400 仓库
按键设置 dsh-keys-setting Enter / Shift+Enter / Ctrl+Enter 各自设成发送或换行 仓库

它们为什么内置、而不是从 npm 装? 原计划是发布到 npm,让插件更新不必等壳发版。但 npm 账号注册走不通(www.npmjs.com 返回 Cloudflare 托管挑战),包发不出去;而 profile 里登记一个 registry 上没有的包,会让插件直接从引擎的 bundle 列表里消失,并让这个 profile 里每一次安装 操作一起失败(都实测到了)。所以保持内置:装上 GUI 就有,勾选即在,不需要命令行。

界面预览

主窗口:会话标题右侧就是模型余量,跟着你选的模型自动切换 —— 用 OpenCode Go 时显示套餐用量 (滚动 / 周 / 月百分比 + 重置时间)和当前模型的总额上限,用 DeepSeek 时显示账户余额。

OpenCode Go 余量与模型总额 DeepSeek 余额
OpenCode Go 余量与模型总额 DeepSeek 余额

设置窗口:引擎更新、第三方插件、数据与桌面,一个窗口管完。

设置窗口
设置窗口

DSH 设置弹窗:除了引擎自己的设置项,还有内置插件加的行。

「通用」页的按键设置 —— Enter / Shift+Enter / Ctrl+Enter 各自设成发送还是换行:

按键设置(DSH 设置 → 通用)
按键设置

模型页里,opencode-godeepseek-v4.1-flash 是插件自动检测目录、补进列表并置顶的 —— 装完就排在第一项,不用手动添加:

自动添加 V4.1 模型(DSH 设置 → 模型)
自动添加 V4.1 模型

安装

用安装包 —— 到 Releases 下载,装完打开即可。

三个平台都有 Release 页,但安装包只在 GitHub:要同时产出 Windows / macOS / Linux 三种产物,只有 GitHub Actions 能一次提供三种 runner;GiteeGitCode 的 Release 提供源码包与更新说明, 安装包请从 GitHub 下载(Gitee 免费版限制附件单文件 100MB、单仓库共 1GB,而我们的安装包是 133–194MB)。

从源码跑(只有开发需要;要 Node.js ≥ 23,打包产物自带便携 Node,终端用户无需安装任何运行时):

npm install    # electron / 构建依赖
npm start      # 启动

打开后建议顺手做两件事:设置窗口 → 第三方插件 勾上你想要的四个插件;Harness 页面 → 设置 里选语言和主题(外壳会实时跟随,不用重启)。

设置窗口

能改什么 默认
引擎更新 更新策略 / 版本通道 / 是否自动检查 询问后再更新 · npm latest · 自动检查开
第三方插件 每个插件的「安装」勾选框 + 「启用」开关 跟随实际状态
数据与桌面 数据目录、关窗行为(隐藏到托盘 / 直接退出)、自动回到最近对话 跟随系统 ~/.dsh · 隐藏到托盘 · 开
语言与外观 不在这里改 —— 在 Harness 页面 → 设置 里改,外壳实时跟随

关于插件的两个开关:

  • 「安装」 = 装没装。勾上立即装、取消立即卸(与 Harness 页面的插件市场是同一套机制)。
  • 「启用」 = 引擎加不加载它。关掉不卸载,只是不加载;与插件市场双向实时同步。
  • 生效方式:装卸要重启引擎(引擎只在启动时组装插件);启用/禁用是热重载即时生效; 带页面部分的插件(模型余量、会话续接、按键设置)还需要刷新 Harness 页面——设置窗口会在那 一行显示「刷新页面」按钮。

数据放在哪

全部在 $DSH_HOME(默认 ~/.dsh,可在设置里切到应用目录):

内容 路径
模型 / 系统 / 插件设置 <DSH_HOME>/settings.yaml
会话历史 <DSH_HOME>/sessions/…
工作区记录 <DSH_HOME>/storages/(工作区业务文件仍在你的真实目录里)
profile 与插件 <DSH_HOME>/profiles/web/…
凭证 <DSH_HOME>/.credentials.yaml

GUI 自己的偏好(窗口行为、数据目录、更新策略)在 <userData>/settings.json。 内嵌页面用内存会话,每次启动都是干净的;退出时连子进程一起清理。

常见问题

  • 第一次启动卡在「正在下载并安装…」:在装 DeepSeek Harness 引擎,仅首次,1–2 分钟。
  • 改了插件/引擎的东西没生效:装卸插件要重启引擎(设置窗口有「重启引擎使生效」,环境不对时它 会告诉你);语言/主题在 Harness 页面改,即时生效。
  • 切了数据目录,旧会话不见了:切换时若源目录有数据会问你要不要搬;选「仅切换」的话数据留在 原位置。
  • npm run dist 在 Windows 报 mksquashfs ENOENT:AppImage 只能在 Linux/macOS(或 CI/Docker)构建。
  • 和官方 CLI 什么关系:这个壳只是启动器,跑的还是官方 @deepseek-ai/dsh;Harness 本身的能力 问题请看 官方文档

开发者

架构与数据流:

启动 → 单实例锁 → 读 settings.json + Harness 主题 → 建窗口(最大化,内存会话)
   └─ boot()
       ├─ 解析 Node:捆绑便携版 → $DSH_SHELL_NODE → 系统 PATH
       ├─ 需要时检查/安装引擎(npm registry,按策略)
       ├─ 启动前对账已装的目录插件(补拉捆绑插件更新;不动用户手动装的)
       ├─ 清理已改名的旧插件(摘 bundle + dependencies,避免新旧两份同时加载)
       ├─ spawn dsh web --no-open --port 0 → 解析 stdout 的 URL → 内嵌加载
       └─ 退出:kill 进程树 + 销毁托盘
├─ src/                 # 源码
│  ├─ main.js           # 主进程:引擎更新、窗口、托盘、设置、数据迁移
│  ├─ plugin-manager.js # 第三方插件(catalog + dsh plugin 安装对账)
│  ├─ engine-patch.js   # 引擎页面兜底补丁(幂等)
│  ├─ preload.js / workspace-preload.js  # 两条 IPC 桥(设置窗口 / 主窗口窄桥)
│  ├─ settings.html / status.html / notice.html
│  └─ home-migrate.js   # 数据目录检测与迁移(纯 Node,可单测)
├─ plugins/             # 四个内置插件副本(**生成物**,由 plugin-repos/ 同步而来)
├─ scripts/             # 构建、发布、同步、冒烟脚本
├─ marketing/           # 推广物料(按版本分目录)
├─ electron-builder.yml
└─ dist/                # 构建产物(已 gitignore)

插件源码 → 内置副本

插件在旁边的独立仓库里,本仓库的 plugins/ 是它们的内置副本:

dsh-dev/
├─ dsh-ready-gui/     # 本仓库
└─ plugin-repos/      # 四个插件仓库
npm run sync:plugins                             # 插件仓库 → plugins/(全量镜像)
node scripts/sync-bundled-plugins.mjs --check    # 只查漂移,不一致退出码 1(CI 用)
  • 改插件请改 plugin-repos/<名字>/,然后 npm run sync:plugins不要手改 plugins/(会被覆盖)。
  • 插件仓库位置自动查找(dsh-dev/plugin-repos、旁边的同名目录、本仓库内 plugin-repos/),也可用 --repos <目录>DSH_PLUGIN_REPOS 指定。
  • 改了插件代码记得提 version:GUI 只在「随包版本比已装的新」时才替换已装副本,同版本不重装 (为了不把用户更新过的副本无人值守降级)。
  • npm run dist:* 会先跑同步,所以发布产物不会带着旧插件。

打包与测试

npm test              # 全部单测
npm run test:e2e      # Windows 端到端(先关掉正在运行的实例)
npm run verify:builtin # 内置插件自愈验证(临时 DSH_HOME,真引擎 + 真 pnpm)
npm run dist:win      # Windows:安装包 + 便携 zip
npm run dist:mac      # macOS(需在 macOS 上跑)
npm run dist:linux    # Linux

可选环境变量:DSH_SHELL_NODE(指定引擎用的 node)、DSH_SHELL_HOME(隔离 DSH_HOME)、 DSH_SHELL_USERDATADSH_SHELL_REGISTRY_URLDSH_NODE_VERSION / DSH_NODE_MIRROR(打包用)。

许可

MIT · 独立开源外壳,与 DeepSeek Harness 官方项目无隶属关系; DeepSeek Harness 本身为 MIT 许可。

CLASSIFICATION EVIDENCE

分类依据

项目类型完整应用
功能分类Agent 与会话
规则置信度

系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: desktop-app、automation。