DeepSeek Harness Hub:把 dsh Web UI 装进原生桌面窗口

前言

用 dsh 干活时,Web UI 通常开在浏览器标签页里:窗口混在一堆标签中间,没有独立的任务栏身份;切走标签就错过任务完成时机;多会话并行只能靠浏览器标签凑合;标题栏与图标也没法跟随 dsh 的主题变化。对把 dsh 当主力界面的开发者来说,这些是每天都会碰到的摩擦。

dsh 的理念是「一切皆插件」,桌面化这件事同样由插件层解决——这就是下面要介绍的 DeepSeek Harness Hub(dsh-hub)。它用 Tauri 2.x 原生窗口承载 dsh Web UI,把托盘、通知、会话标签栏、交互终端、窗口记忆这些桌面能力补齐。项目自身也经历过一次壳换代:早期版本(0.0.1-rc.14 / 0.0.2-rc.*)用 WebView2 做壳,当前已整体迁移到 Tauri 2.x,旧分支 dev-v1 已永久冻结。

这是什么

DeepSeek Harness Hub 是 MarecGents 维护的开源项目,一句话定位:DeepSeek Harness(dsh)的桌面端框架,以原生 Tauri 2.x 窗口运行 dsh Web UI,提供托盘、主题同步、窗口记忆、右侧栏与系统通知。

工程上分两半:

  • 桌面壳:单一 Tauri 原生应用,cargo tauri build 产出 NSIS 安装器,平台为 Windows;
  • 插件半边:npm 包 @marecgents/dsh-hub(当前 0.1.4),承载 client UI、HTTP routes 与 cordis.patch.yml,并通过 dsh.client.inject 注入 @deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-ui-settings

版本与分支状态(2026-09-01):npm latestrc 双 tag 均为 0.1.4;main 为唯一发布分支,dev-v2 为唯一开发分支(当前 = 0.1.4),dev-v1 永久冻结。许可证 MIT。

核心功能

桌面化与窗口管理

  • 原生桌面身份:任务管理器显示 DeepSeek Harness Hub 的图标与名称(NSIS 安装);
  • 品牌化 Splash:启动覆盖层配色跟随当前皮肤/主题(helpers/boot_theme.rs),dsh SPA 首绘后平滑淡出,不留白屏间隙;
  • 窗口状态记忆:最大化、分辨率、主题持久化到 $DSH_HOME/dsh-hub/config.json;无保存尺寸时默认开在光标所在屏的 3/4(多显示器感知,下限 480×360);
  • 主题跟随(system):MutationObserver 事件驱动,标题栏深浅色、webview 背景与窗口图标实时跟随 dsh 页面主题(Tauri 壳 Rust Dwm 实现);
  • 桌面图标六面同步:任务栏、标题栏、Alt-Tab、托盘、开始菜单与桌面快捷方式统一指向 icons\current.ico 固定锚点;设置卡可选 5 张鲸鱼娘图标(sad/happy/duo/maid/blue)或默认主题翻转鲸鱼。

系统托盘与通知

托盘提供四类操作:显示/隐藏主界面(按窗口状态动态切换)、打开工作区(自动激活并前置资源管理器)、新建任务、退出。新建任务走官方 ctx.workspaces.startSession 流程,SPA 未就绪时以 __mgShellReady 300ms×20 轮询重试,不丢命令;退出前写 quit.marker 干净退出,避免被误判为崩溃重启。

通知侧包含两部分:

  • 四段原创合成音效(开始 / 完成 / 需要你 / 出错,无第三方素材),窗口隐藏到托盘时依然可闻;
  • 任务完成或出错时弹 Windows 原生 Toast(notify-rust,30s 冷却),点击回窗口并跳到对应会话(mg:shell-command focus-session 事件 + __mgShellReady 300ms×20 重试);正在查看的会话完成时只响提示音不弹 Toast。

会话标签栏与置顶

标题栏内是浏览器式会话多页标签:

  • 点击切换、 新建、× 关闭;状态点区分会话状态(等待琥珀 / 后台完成绿 / 运行蓝 + 脉冲);
  • 内联重命名(IME 组合输入不误提交);拖拽排序,持久化在 localStorage dsh-hub:session-tabs
  • 右键菜单复用官方 session-menu(分叉 / 归档 / 复制路径 / 资源管理器)。

置顶会话:会话行 hover 即可置顶(同名会话安全跳过),置顶区常驻列表顶部,持久化于 $DSH_HOME/dsh-hub/pins.json(localStorage 兜底)。

交互终端

底部 dock 提供真实交互终端,基于 xterm.js 6.0.0 + node-pty:

  • Ctrl+J 开关;每 tab 一个独立会话,cwd = 打开时所在工作区;
  • 自定义 Shell:PowerShell 5.1 / PowerShell 7 (pwsh) / cmd / Bash——只列出宿主探测到的 shell,默认选择持久化(terminal-prefs);
  • 输出走 SSE JSON 信封 + 进程级 token 鉴权(Authorization: Bearer / EventSource ?token=);
  • 关闭时 taskkill /T /F 杀整棵进程树防残留。

注意:对 rm / Remove-Item / format 等危险命令的拦截是 UX 护栏,不是安全边界。

模型选择与权限策略

  • composer 的模型入口替换为 provider → model 两级嵌套菜单,外加独立 thinking-effort 触发器;复用官方 modelDirectories 服务,与 /model 命令状态一致,服务缺失时自动降级内置 seat,不阻塞;
  • 权限策略来自 dsh-permission-guard 插件的 policy 三档:follow(跟随会话官方预设)/ strict(白名单)/ read-only,设置页与会话左下角 chip 双入口切换。

四个独立 dsh 插件

hub 附带四个独立插件,双轨分发(随 hub resources 打包 + 独立 npm 轨,详见仓库 BUILD.md §7):

  • findings-ledger:baseline 快照 + 变更对账 + 覆盖度报告;
  • permission-guard:逐命令权限白名单 + 四级能力拦截(auto / give-command / confirm / never);
  • project-memory:每项目持久记忆(FACT.md + JOURNAL.jsonl),自动注入 systemPrompt.context,并提供 memory_read / memory_log / memory_fact 工具;
  • usage-stats:按 provider / model 聚合 token 用量,设置页可视化(汇总 / 各模型卡片 / 按天表格 / 趋势图 / 单价费用估算)+ HTTP API。

设置页、皮肤与双语界面

  • 设置页为官方插件页风格:分辨率 / 常规设置 / 外观设置三卡片(默认折叠)+ 权限策略单列,覆盖窗口尺寸 / 主题 / 托盘行为 / 会话完成通知 / 提示音 / 多实例开关 / 界面皮肤 / 背景图 / 桌面图标;
  • 皮肤 15 套:内置 5(午夜蓝 / 旧纸张 / 终端绿 / ZCode / 极光紫)+ Reasonix 官方 8(rx-)+ opencode 2(oc-),每套浅 / 深 × 33 token,另可配背景图;
  • i18n 全量双语(zh/en):hub 界面文案与 usage-stats 文案收进词典,语言源 = dsh 设置 General → Language,切换即全量刷新。

界面细节

  • 对话定位条(rail):中栏左缘竖排 minimap,点击跳转;hover 按 turnTimings 时间窗预览真实节点 kind;配色按皮肤表面色 × 背景图采样自适应;
  • 右侧栏三页:概览(Token 统计)/ 文件树 / Git 变更,收起后保留窄栏快捷按钮;
  • 右键菜单全量 DOM 接管:会话 / 工作区对象行专属菜单,空白处刷新菜单,文本编辑要素不干预;
  • 壳内拖放恢复:列表行(工作区 / 会话)与标签拖拽排序;拖文件到输入区 = 官方附件上传,其他区域安全忽略,杜绝 file:// 导航。

安全与稳健性

  • S0 安全:POST/PUT 等状态变更请求校验 Origin 白名单(loopback / tauri:),缺失 Origin 拒绝;GET/HEAD 跳过(DNS-rebinding 由 Host 校验覆盖);
  • 工作区打开接口 POST /api/dsh-hub/workspace/open:用 OS 默认方式打开文件 / 文件夹,host + origin + token 三重守卫;
  • 多实例保护:启动时检测已有 dsh 实例(任意端口),默认拒绝共存以防会话数据损坏;
  • 性能:会话后台预热(长会话冷开约 2s → 0.2s)+ 聊天流 content-visibility。

安装与启用

安装走 NSIS 安装器路线:

1、从 GitHub 仓库获取 NSIS 安装器:https://github.com/MarecGents/deepseek-harness-hub 。需要说明:本文依据的资料截取中未包含可直接复制的安装命令原文,这里不按包名自行拼接,具体安装步骤以仓库 README 为准;
2、安装期自动下载私有 Node + dsh + 插件到安装目录,无需系统预装 Node;
3、首启自动进入 dsh UI。

卸载走快速通道并清理自有 profile 条目,保留 .dsh 本体与用户数据。若走 npm / 源码路线集成插件半边,@marecgents/dsh-hub 当前版本 0.1.4,engines 要求 Node >= 24.0.0。

典型用法

下面是几个可复现的日常流程:

1、多会话并行:在标题栏标签栏点 新建、× 关闭;右键标签可分叉 / 归档 / 复制路径 / 打开资源管理器;会话行 hover 置顶,置顶区常驻列表顶部。

2、后台跑长任务:把窗口藏进托盘继续干活。会话完成时响提示音并弹 Windows Toast,点击 toast 回窗口并自动跳到对应会话;当前正查看的会话完成时只响提示音,不打断。

3、开交互终端:Ctrl+J 开关底部终端 dock,每个 tab 独立会话(cwd = 打开时所在工作区);默认终端在设置面板从已检测到的 PowerShell 5.1 / PowerShell 7 / cmd / Bash 中选择并持久化。

4、托盘新建任务:从托盘菜单直接新建,走官方 ctx.workspaces.startSession 流程,UI 即时刷新。

上述行为涉及的本地持久化位置:

$DSH_HOME/dsh-hub/config.json         # 窗口尺寸 / 主题 / 托盘 / 桌面图标等
$DSH_HOME/dsh-hub/pins.json           # 置顶会话(localStorage 兜底)
localStorage: dsh-hub:session-tabs    # 会话标签排序
localStorage: terminal-prefs          # 默认终端选择

适用场景与注意

适合:

  • 在 Windows 上把 dsh 当主力工作界面、需要多会话并行与后台通知的开发者;
  • 需要托盘常驻、原生交互终端、每项目持久记忆与 token 用量统计的重度用户。

注意:

  • 平台仅 Windows(Tauri 壳 + NSIS 安装);
  • 多实例保护默认拒绝共存,确需共存须在设置中显式开启(附危险警告);
  • 交互终端的危险命令拦截是 UX 护栏,不是安全边界,不要把它当隔离手段;
  • 置顶会话(pins)在多标签 / 多实例下是整体替换语义,最后写者胜;
  • 插件以当前 dsh 进程的权限运行,安装前建议检查源码与许可证(本项目为 MIT);
  • 完整功能清单见仓库 FUNCTIONS.md(11 大类,每项带来源与测试状态)。

结尾

dsh-hub 解决的问题很集中:让 dsh 不再是浏览器里的一个标签页,而是一个有托盘、有通知、有会话标签栏和原生终端的桌面应用,同时保持「一切皆插件」的 dsh 形态。当前版本 0.1.4,MIT 许可。

  • GitHub 仓库:https://github.com/MarecGents/deepseek-harness-hub
  • 社区目录页:https://www.skillhub.cn/plugins/MarecGents/deepseek-harness-hub (该目录为社区维护站点,与 DeepSeek / 幻方无官方从属关系)
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye