前言¶
用 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 latest 与 rc 双 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-commandfocus-session 事件 +__mgShellReady300ms×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 / 幻方无官方从属关系)