Skip to content

dsh-ui-scale

Verified

@caohaoyangcn/dsh-ui-scale · v1.3.0 · MIT · Web UI

Global UI scale and per-surface font-size control for the DeepSeek Harness web GUI: a scale ratio that enlarges the whole application shell instead of only conversation text, plus independent font sizes for the sidebar, conversation, right sidebar, and bo

Install

dsh plugin add @caohaoyangcn/dsh-ui-scale

Confirm the layer applied with dsh --profile default --dump-config — see the install guide.

Source

Tags

Creators

Readme

@caohaoyangcn/dsh-ui-scale

DeepSeek Harness(dsh)Web GUI 的全局界面缩放插件。

解决一个具体问题:按 ⌘+ / Ctrl++ 时,只有会话正文的字号变大,侧边栏、设置面板、底部栏等界面的尺寸纹丝不动。因为 dsh 内置的 ui-theme 只调整三个「字号角色」(正文 / 代码 / 终端),其余界面的尺寸全是硬编码像素。

本插件提供一个作用于整个应用外壳的缩放比例,并为各界面区域提供独立的字号设置。

功能

  • 整体缩放比例(75%–200%,步进 5%):按比例缩放整个界面 —— 文字、间距、图标、列宽一起等比变化。
  • 分区字号(10–22px):侧边栏、会话区域、右侧栏、底部栏各自独立设置基础字号。只改字号、不改列宽,因此不会把文字挤出栏外;行距与容器高度同步等比放大,所以字号变大时行间距保持不变。
  • 分区粗体:每个区域可单独开启粗体。
  • ⌘+ / ⌘− / ⌘0:放大 / 缩小 / 恢复默认,与原有快捷键并存。
  • 设置持久化在浏览器本地,刷新与重启都保留,多标签页自动同步。

设置入口:设置 → 界面缩放。

安装

在 Harness 里打开插件 → 添加插件,在「包名或地址」填入:

@caohaoyangcn/dsh-ui-scale

这会把插件装进当前 profile,并登记为 bundle。

命令行等价做法(dsh plugin 会把参数转发给 profile 目录下的 pnpm):

dsh plugin --profile <你的 profile> add @caohaoyangcn/dsh-ui-scale

安装后重启应用 —— bundle 的配置在宿主进程启动时读取一次,刷新页面不会生效。

卸载

插件 → 找到 @caohaoyangcn/dsh-ui-scale → 卸载。

工作原理与已知边界

  • 整体缩放通过 #root 上的 CSS zoom 实现。这是唯一能让文字、间距、图标同步放大、同时把列宽留给宿主应用计算的方式。
  • 缩放比例会受窗口宽度限制并自动封顶:外壳的列宽由宿主按窗口宽度计算,放大到超出可用宽度会使中间栏被裁切。插件在运行时实测外框尺寸,二分求出当前窗口不会裁切的最大比例,界面上会提示实际生效值。
  • 分区字号不走 zoom。在固定列宽的栏内缩放内容会连同子元素的盒子一起放大,实测会把内容推出栏右边缘 70px 以上,正好被相邻栏盖住 —— 这正是本插件最初版本的缺陷。因此分区改为只调整字号:先记录每个元素自身声明的字号,再按比例写回,从而在放大的同时保留字号层级(品牌名 > 正文 > 说明文字)。
  • 代码块与终端不受分区字号与粗体影响,仍由 ui-theme 的对应角色管理。
  • 分区字号会连同行距一起放大。宿主的 line-height 和行高都是固定像素(标题 14px 配 22px、说明 12px 配 13px),只放大字号会把行高比从 1.57 压到 1.22、说明文字甚至压到 0.84(行会互相重叠)。插件会在应用字号前记录每个元素自己的行高,按同一系数写回,因此行高比恒定;只有会被新行高裁切的固定高度行才用 min-height 撑开,height 本身从不改写(getComputedStyle 返回的是使用值,写回会把 height:100% 冻成固定像素并撑破容器)。
  • 分区粗体是统一个字重(700),不保留各元素原本的粗细差异。原因是实测出来的:Chromium 在 700 以上不再变粗,而许多中文字体(如本机的 Sarasa UI SC)只装了一个 Regular 字面、粗体靠合成,实际只有「常规 / 粗」两档。任何试图保留原有粗细层级的方案,要么把所有元素压到同一档,要么让一部分文字根本不粗——后者违背这个开关的意义。区域的层次仍由字号承载(品牌名 18px、列表 14px、说明 12px),这一部分独立保留。
  • 挂载在 body 上的浮层(右键菜单、悬停提示、Toast)不会跟随缩放,但位置仍然正确对齐 —— 这些浮层的定位代码混用了受缩放与不受缩放影响的度量,缩放它们会导致每个菜单错位几十像素。设置面板是例外,它会跟随整体缩放。
  • 列宽拖拽手柄由本插件重新对齐。宿主 ui-layout 用 getBoundingClientRect() 量视口宽度,却把结果当布局单位去算手柄的 left;在 zoom 之下这两个单位相差一个比例系数,而误差全部落在手柄上(实测比例 1.2 时右侧手柄偏离面板左缘 254px,1.5 时 636px),那条 8px 的 col-resize 热区因此根本不在你要拖的边上 —— 右侧栏看起来「没法 resize」。插件改用纯布局单位(offsetLeft/offsetWidth)重新计算每条手柄该落的位置,再以 transform 补偿:既不需要知道当前比例,也不改写宿主自己的 left。左右两条手柄都处理。该补偿在拖拽过程中恒定,所以拖动时手柄始终贴着边缘;补偿为 0 时不产生任何视觉变化(比例 100% 即完全无操作)。

兼容性

  • 平台:dsh Web GUI(桌面版在渲染进程中运行同一套 Web UI)。
  • 零运行时依赖。
  • 与 ui-theme 并存:ui-theme 继续负责会话正文、代码、终端的字号,本插件负责其余界面。

许可

MIT