DeepSeek Harness 插件

jiangnanquan/dsh-ux

Star 数 ★ 10 分类 UI 增强 收录于 2026-08-14

Solarized 浅色主题、紧凑布局、思考/工具链折叠胶囊,以及余额、本轮成本与用量看板的 DSH Web 界面增强插件。

安装

# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)

dsh plugin --profile web add github:jiangnanquan/dsh-ux

装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。

README

中文 | English

DeepSeek Harness(DSH)Web 界面增强插件,由江南泉个人开发并免费开源。它在设置面板里提供独立一页「界面增强」,所有开关即时生效;包含 25 套终端美学配色、文字墨色、中文优先字体、紧凑布局、折叠胶囊,以及账户余额 / 用量与官方峰谷提醒。

dsh-uxexo

能力

类别 内容
设置页 设置面板左侧独立一页「界面增强」:每项功能即时生效,改完不用重启
配色主题 25 套,取自江南泉《终端美学》三部曲:经典 CRT、纸面浅色、现代双生、AI 品牌;深色主题自动带 color-scheme: dark
文字墨色 深墨(默认, 推荐)/ 跟随配色 / 纯黑;只改文字 token,浅色主题生效
字体 中文优先的 0.5 窄体等宽方案(更纱黑体 Mono/Term、Noto Mono CJK、Maple Mono…);字重默认半粗(推荐)
布局 加宽消息列、收紧对话间距、对齐新对话输入卡片与 / @ 候选菜单、禁用橡皮筋滚动
折叠胶囊 0.1.x:思考块聚合为 Think ×N、工具调用聚合为 A → B → C 链路胶囊。0.2.0:官方过程分组接管显隐,插件把胶囊摘要挂到「已完成,用时 X」行下方,点击联动官方展开/收起;长链路按可用宽度换行
账户用量 输入框下方显示官方账户余额、本轮 token 成本与近 30 天用量图表;官方 API/账号时附「峰 / 谷」计费徽标,点击查看官方峰谷规则与下一次切换
强调色 发送/停止按钮与侧栏「新会话」统一使用主题第三个锚点色(accent);按钮反白字按每套主题的 on-accent 自动取黑/白

长工具链会跟随消息列宽度自动重新分行,每个视觉行保持独立、完整的胶囊轮廓:

工具链换行后每行独立胶囊

设置页顶部还有一枚 GitHub Star 入口:如果 dsh-uxexo 帮到了你,欢迎去仓库点个 Star。

配色主题:江南泉《终端美学》三部曲 25 套

设置页「外观 → 配色主题」用一个下拉切换,按来源分组——全部取自江南泉的《终端美学》三部曲。 命名统一为 English · 中文:英文保留官方原名与变体名(Rosé 的重音也保留),中文只做简短意译, 长名字在下拉里也不会断行。

分组 主题
官方 Official · 官方配色
经典 CRT(第一部) P1 Green Phosphor · 绿磷光、P3 Amber Phosphor · 琥珀光、Matrix Rain · 代码雨、Cyberpunk 2077 · 夜之城、Radar Red · 雷达血红、Weyland Corp · 维兰重工、NERV MAGI · 三贤者
纸面浅色(第二部) P4 White · 纸白、Everforest Light · 绿色森林、Parchment Classic · 羊皮纸、Solarized Light · 暖羊皮纸、Catppuccin Latte · 拿铁
现代(第三部) Tokyo Night · 东京夜、Tokyo Night Day · 东京白昼、Kanagawa Wave · 神奈川·浪、Kanagawa Lotus · 神奈川·莲、Rosé Pine · 玫瑰松木、Rosé Pine Dawn · 玫瑰晨光、Catppuccin Mocha · 摩卡
AI 品牌(第三部) Claude Light · 书斋浅、Claude Dark · 书斋深、OpenAI Light · 涌现浅、OpenAI Dark · 涌现深、Gemini Light · 极光浅、Gemini Dark · 极光深

每套主题只声明底色、正文、强调、状态色四个锚点,其余 surface / border / hover / 反白字 由同一套推导规则生成,所以 25 套的层级关系一致,加新配色只需补一行数据。深色主题会自动 设置 color-scheme: dark,并使用配色自带的墨色;「文字墨色」只对浅色主题生效。

0.2.x 起官方公共菜单改用玻璃材质 --dsw-menu-surface-fill(浅色 58% / 深色 45% + 背景模糊, macOS 另铺一层 bg-base 做不透明 backing)。本层按「合成后等于本主题 layer-1」反解玻璃填充, 并接管配套的吸顶分组标题 --dsw-alias-menu-group-header-fill(94%)、菜单图标 --dsw-alias-menu-icon 与暗档文字 --dsw-alias-label-primary-dimmed;菜单面内的选中/悬停 底色则重绑到 layer-1 上(全局 hover 是 base + accent,直接落在 layer-1 上几乎同色)。 不接管这几个 token 时,深色主题会继承官方浅色玻璃,菜单就成了深色页面上的一块浅色板。

同一轮把官方 0.2.x 主题表新增的其余 token 也全部接管(共 49 个:文档预览、文件 diff、 状态色阶、遮罩、tooltip / toast、反白与 bluish 标签、轨迹品牌色等)。规则与官方同构: 状态三级色 = 底色混状态色,文件 diff 底/行号区 = 更淡的同色混合,反白标签取与主文字 对立的对比色,link 与深潜标签以 accent 为底做可读性兜底(不足 AA 时向黑/白收), 菜单材质与吸顶标题保持官方 58% / 45% / 94% 的透明度语义。Solarized 手写块保持官方 fallback(浅色主题下官方浅色值本就合规),观感不动。

主题的第三个锚点 accent 会统一应用到发送/停止按钮与侧栏**「新会话」**:前者总是跟随 accent;后者默认跟随,可在「外观 → 新会话按钮弱化」里改成只比侧栏底色略深的弱化样式。

所有非 Solarized 主题的正文在 bg 与 layer-1 上都过 WCAG AA(4.5:1);Solarized 保留 原手写 token 的观感,由墨色档位兜底。东京白昼的正文在原始 #3760BF 上对 layer-1 只有 4.08:1,已压深 4% 到 #2F55B5(4.74:1)。

文字墨色:深墨(默认)/ 跟随配色 / 纯黑

Solarized 的默认正文色是 base01 #586e75(青灰),在暖黄底上会显得「蒙了一层灰」: 基础面 #fdf6e3 上 4.99:1,落到 layer-1 #eee8d5 只剩 4.39:1(低于 WCAG AA 的 4.5)。 这一项只改文字 token,不动背景与品牌色,三档:

档位 效果
深墨(默认, 推荐) 暖青黑 #002b36,比浅色主题的默认墨色深一档;Solarized 上对 layer-1 从 4.39:1 提到 12.2:1
跟随配色 继承配色自己的墨色(Solarized 即上面的青灰),最贴近原设计
纯黑 #000000,19.5:1,强光/低视力更清楚,但大段正文会偏硬

只作用于浅色:深色配色各自定义 ink,不在这里强行覆盖;按钮主色上的反白字 (--dsw-alias-label-primary-foreground)也不受影响。

字体:中文优先 / 0.5 窄体西文

依据《终端排版哲学:中文优先与 0.5 窄体等宽工程实战》(本机实测数据见下表):

汉字是不可妥协的 1.0 正方。要让「2 个西文字符 = 1 个汉字」严格成立,西文就必须收窄到 0.5; 而以西文为基准的编程字体(Menlo、JetBrains Mono、Fira Code、Maple Mono……)西文宽 0.6~0.67, 汉字容器会被撑到 1.2 —— 汉字要么被横向拉宽 20%(矮胖、字怀塌陷),要么两边留白(中文词句涣散)。

本机 CoreText 实测(unitsPerEm=1000,字形前沿宽度):

字族 西文 a 汉字 中 比值 — → ★
Sarasa Mono SC 0.500 1.000 2.000 1.000 1.000 1.000
Sarasa Term SC 0.500 1.000 2.000 0.500 0.500 0.500
Noto Sans Mono CJK SC 0.500 1.000 2.000 0.894 1.000 1.000
Sarasa Gothic / UI SC 0.562 1.000 1.78 1.000 0.954 1.045
Maple Mono NF CN 0.600 1.200 2.000 0.600 0.600 —
Maple Mono(非 CN) 0.600 无字形 — 0.600 0.600 —

更纱黑体的架构正是这一哲学的产物:西文用 Iosevka(严格 0.5),汉字用思源黑体(1.0), 基线、x 高度、字重曲线都被逐像素对齐过。Mono 与 Term 的唯一差别是东亚歧义字符 (—……→★■●):Mono 保持全角(适合读 Markdown、中文标点),Term 压成半角(适合密集网格、 跳格最稳)。Maple Mono NF CN 的汉字被拉到 1.2,正是文章里要避开的那一类。

设置页里可选:

方案 说明
自动(推荐) 按可用性依次尝试:更纱黑体 Mono → Term → Noto Mono CJK → Maple Mono;一款都没装就落回官方字体栈
Sarasa Mono SC 0.5 窄体 + 全角歧义字符
Sarasa Term SC 0.5 窄体 + 半角歧义字符
Noto Mono CJK Noto Sans Mono CJK SC,同为 0.5/1.0
Maple Mono 旧观感(西文 0.6 / 汉字 1.2),保留兼容
关闭 完全不动官方字体栈

本机装了哪几款会实时探测并标在页面上(未装的方案置灰,装了字体回来即可,无需重启)。 字重另有「标准 / 半粗」两档,默认落在半粗(推荐)——把正文抬到 600、强调抬到 700, 用字族自带的矢量 SemiBold(文章 §3.2 的甜点位);两种模式都同时关掉 font-synthesis, 即文章 §3.1 的「不用算法级伪粗」——伪粗是光栅化阶段向外描边,会挤占字怀、让笔画黏连。

页面底部还带一块对齐自检块(文章 §5 的校验文本,已按 2:1 校齐列宽): 第 1 行 40 个半角字符必须与第 2 行 20 个汉字等宽,方框必须是矩形,一眼就能看出方案对不对。

选型依据、实测数据、加新字族的步骤见 docs/字体方案-中文优先与0.5窄体.md。

峰谷提醒(官方 API / 官方账号)

输入框下方那行「本轮 ¥x」后面会多一枚「峰 / 谷」徽标,只在最近一次请求真实使用的 provider 是 deepseek-official 或 deepseek-account 时出现:

状态 时段(北京时间) 显示
峰 周一至周五(不含法定节假日)09:00–12:00、14:00–18:00 琥珀色「峰」,提示按峰时价计费
谷 其余时段,含周末与法定节假日全天 绿色「谷」,提示空闲半价

判定口径按 DeepSeek 官方 2026-08-23 的调价公告与 2026-09-19 的节假日说明:

  • 高峰仅落在工作日(周一至周五,不含中国法定节假日)的 9:00–12:00、14:00–18:00;
  • 周六、周日全天按空闲价,调休上班的周末也算周末;
  • 中国法定节假日全天按空闲价;空闲价为高峰价的一半。

节假日日历每年自动获取

放假安排每年由国务院办公厅发布,插件不需要每年补表:

  • host 半按需拉取当年与次年的机读日历(来源:holiday-cn, 按国办通知维护,JSON 里保留原通知链接),解析出 isOffDay 的日期并缓存;
  • 缓存位置 ~/.dsh/dsh-uxexo/calendar-<年份>.json;往年日历视为不可变,当年/次年每 7 天刷新, 客户端每 6 小时向 host 同步一次;
  • 次年安排未发布时(数据源返回空列表)不会误判为「没有节假日」,仍按工作日口径兜底,发布后自动采纳;
  • 断网时用内置的 2026 表兜底,不影响徽标与成本统计;
  • 所以跨年是自动的:2027 年安排一发布,徽标与成本口径会自己切换,无需改代码。

点击徽标会弹出官方规则浮层:当前状态与原因(周末 / 法定节假日 / 工作日非高峰)、 下一次切换的具体时间与倒计时、官方定义与出处链接。悬停徽标同样能看到倒计时;「发送」与 「选择模型」两个按钮的 title 也会同步带上「官方 API 峰时计费 / 空闲半价」。状态每 30 秒 重算,跨过 12:00 / 18:00 或周末/节假日边界不用等下一次用量轮询。

判据是会话日志里的 request/header.config.provider,不是「余额能查」——余额走 API Key,用户完全可能刚切到 scnet / opencode2dsh,这时不显示峰谷,避免给出错误的计价提示。

设置(即时开关)

打开 设置 → 界面增强,这一页就是本插件的全部开关:

开关 关掉之后
启用 dsh-uxexo 界面增强 总开关。整层增强立刻撤下、回到官方外观;各分项的选择保留,再打开时按原样回来
配色主题 下拉里选「Official · 官方配色」即回到官方主题;默认 Solarized;25 套主题与命名见上节
新会话按钮弱化 默认关闭(「新会话」跟随主题强调色);打开后左上角「新会话」只比侧栏底色略深一点,回到克制的弱化观感
字体方案 / 字重 回官方字体栈与官方字重;方案选「关闭」等价于只关字体层;默认半粗(推荐)
文字墨色 三档单选:深墨(默认, 推荐)、跟随配色、纯黑;只影响浅色文字,不动背景与品牌色
紧凑布局微调 消息列宽、间距、输入卡片对齐都回官方几何
折叠胶囊 思考/工具调用恢复成官方逐条展开的样子,注入的胶囊节点同时被收回
账户余额与用量 输入框下方那行余额、本轮成本、峰谷徽标与图表消失,也不再轮询余额接口

全部即时生效,不需要重启:开关写在 <html> 的 data-dsh-ux-* 属性上(CSS 闸门,改属性立刻改变行为), 同时存进一枚 cookie,让宿主半在首帧渲染前就把状态恢复好(否则会先按官方配色画一帧再跳)。

唯一需要重启的情况是插件本体更新:客户端半随页面刷新/热重载换新,宿主半(几个 /enh/* 接口、 首帧注入脚本)由 dsh 进程在启动时加载,换不了。设置页顶部会比对两半的构建号,一旦对不上就直接写明 「重启 DeepSeek Harness 后生效」,并提供「重新检测」。这也是 GET /enh/ping 的用途。

安装

前置:已按 DSH 的 profile 机制运行(dsh web)。

dsh plugin --profile web add github:jiangnanquan/dsh-uxexo#main

本包声明了 dsh.bundle.patch 与 dsh.client,dsh plugin add 会自动把它加入 profile 的 bundles, 重启 dsh 后即生效,无需手改任何配置。重复执行该命令是安全的(幂等);升级用 dsh plugin --profile web update dsh-uxexo。

官方桌面版不使用这条命令:desktop profile 由 Electron 应用独占, dsh plugin --profile desktop … 会被直接拒绝。桌面版装法见 INSTALL.md。

交给你的 AI

不想手动敲命令?把下面这段话粘贴给任意 AI agent(Claude Code、dsh、Gemini CLI……),让它读 INSTALL.md 并完成安装与自检:

请按照 https://github.com/jiangnanquan/dsh-uxexo/blob/main/INSTALL.md 里的步骤,在我的机器上安装并验证 dsh-uxexo 插件(profile 用 web),然后运行文档里的健康检查并告诉我结果。如果任何一步失败,按文档的回滚步骤恢复原状并说明原因。

依赖与前提

  • 字体:推荐安装更纱黑体(Sarasa Gothic 的 Sarasa-SuperTTC,或 Sarasa Term/Mono SC 单独字重)—— 它是唯一同时满足「西文 0.5 窄体 + 汉字 1.0 正方」且中西文字重曲线对齐过的免费字族。 没有更纱时可用 Noto Sans Mono CJK SC(同为 0.5/1.0,但只有 Regular/Bold), 或继续用 Maple Mono(西文 0.6、汉字 1.2)。 一款都没装时字体层自动落回官方字体栈,不影响其余功能。
  • 余额 / 本轮成本 / 用量图表 / 峰谷提醒:调用 DeepSeek 官方接口,需要当前 DSH 已配置 DEEPSEEK_API_KEY 凭据;未配置时这些信息显示为查询失败/不可用,不影响其余功能。
  • 计价表按官方峰谷价硬编码在 lib/index.js 的 pricingFor / PRICE_TABLES:高峰仅工作日 9:00–12:00、14:00–18:00,周末与法定节假日全天空闲价(高峰价一半);历史成本按 2026-08-17 (启用峰谷)、2026-08-23(周末全谷)、2026-09-10 12:00(Flash 调价)三个时间点分段。
  • 中国法定节假日不再硬编码年份:lib/calendar.js 每年自动拉取、解析并缓存放假安排,跨年无需 手工补录;lib/index.js 与 lib/client.js 里各保留一份 2026 内置表,只作离线/首启动兜底 (冒烟测试核对两份兜底一致)。官方调价仍属事件驱动,需要人工更新价格表。

卸载

dsh plugin --profile web remove dsh-uxexo

License

MIT

内容来自项目 README(GitHub)↗

链接

同类插件

查看整个分类 →

社区评论

评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。