rans725/dsh-glass-ranswork

rans725/dsh-glass-ranswork

DSH Web 界面的毛玻璃主题:磨砂半透明表面,可调不透明度、模糊半径与饱和度,支持氛围光与配色方案,并可设置自定义背景图片(填充、适应、拉伸、平铺、居中与裁剪),全部参数保存在设置页中。

主题与外观

dsh-glass-ranswork · 自定义主题

给 DeepSeek Harness Web 界面加上「半透明 + 背景模糊」的毛玻璃外观,并在 设置 → 自定义主题 里提供一个完整的调参页(启用 / 不透明度 / 面板不透明度 / 模糊 / 饱和度 / 氛围光 / 配色 / 自定义背景图片)。

出厂默认即用户要的 80% 半透明(opacity: 20,即表面 20% 不透明); 信息面板单独一档 `panelOpacity: 85`,保证弹层和文件预览里的字看得清。

快速开始

升级之前先看「升级」一节。 把 .../main.tar.gz 当安装地址时,pnpm 会把
那个 tarball 的 integrity 和 version 一起写进 lockfile —— main 会动,
你的依赖不会跟着动。重装多少次都还是当初装下的那个版本。
  1. 打开 DSH → 设置 → 插件 → 安装插件;
  2. 粘贴地址(推荐第一种):

npm(推荐)

dsh-glass-ranswork

codeload 固定版本(不想用 npm 时)

https://codeload.github.com/rans725/dsh-glass-ranswork/tar.gz/refs/tags/v1.1.1

本地目录:把仓库 zip(Code → Download ZIP)或 Release 的 .tgz 解压, 填含 package.json 的那层目录,例如 D:\Plugins\dsh-glass-ranswork。

  1. 装完按提示重启 DSH,打开 设置 → 自定义主题 即可调外观。
  2. 设置页顶部会显示当前加载的版本号(如 v1.1.1);有新版时多一行提示。

安装

本包是一个 DSH bundle(package.json 的 dsh.bundle.patch 指向 cordis.patch.yml,dsh.client 声明浏览器半侧),不需要构建、没有依赖。

方式一:npm(推荐)

在 profile 目录里直接装:

pnpm add dsh-glass-ranswork

为什么推荐 npm:装 npm 的包,插件市场能感知到新版本并推送更新提醒。 下面那些 URL 安装方式虽然能装,但永远收不到更新推送 —— 市场对 URL 安装 没有 registry 身份可比,宁可如实报「无更新」也不猜(dshmarket #768)。

从旧版 URL 方式升上来的用户:lockfile 里记的还是 URL,改 npm 后仍然收不到推送。
需要重装一次:pnpm remove dsh-glass-ranswork && pnpm add dsh-glass-ranswork

好处是版本可以写范围(^1.1.1),升级由 pnpm 和市场的更新提醒共同覆盖。

方式二:codeload 固定发行版(不想用 npm 时)

pnpm add https://codeload.github.com/rans725/dsh-glass-ranswork/tar.gz/refs/tags/v1.1.1

好处是版本可以写死在 tag 里,升级时换 tag 号即可;坏处是不能写成 ^1.1.1 这种范围(pnpm 无从解析),所以「有新版本」的提示靠设置页顶部那一行。

方式三:codeload 直链(固定版本,不需要 Git)

https://codeload.github.com/rans725/dsh-glass-ranswork/tar.gz/refs/tags/v1.1.1

为什么不写 https://github.com/.../archive/...:

  • github.com 只负责 302 跳到 codeload.github.com;主站被墙 / 不稳时,

pnpm 的 HEAD 请求会 ETIMEDOUT,而真正下发 tar 的 codeload 往往是通的;

  • codeload 直链少一次跳转,受限网络下成功率明显更高,代码不用改一行。
版本号必须写进 URL。 refs/heads/main 看着“永远最新”,但 lockfile 一旦
记录了这个 spec 的 integrity,pnpm 不会为了同一个 spec 重新解析远端。
升级 = 换成新 tag 的 URL 再装一次(见「升级」)。
为什么不推荐 `github:` 前缀:pnpm 解析 github: 依赖会调用系统 git;
Windows 上没装 Git 就会报 git ls-remote failed。上面的地址由 pnpm 直接
下载解包,不需要 Git。

方式四:Release 安装包(固定版本)

到 Releases 下载 dsh-glass-ranswork-1.1.1.tgz,安装时填它的本地路径,或直接填资源地址:

https://github.com/rans725/dsh-glass-ranswork/releases/download/v1.1.1/dsh-glass-ranswork-1.1.1.tgz
资产地址同样先经过 github.com。主站不通时,改用上面的 codeload 直链。

方式五:本地目录 / zip

两种来源都可以:

  • 仓库页 Code → Download ZIP(解压后是 dsh-glass-ranswork-main/);
  • 或 Release 里的 dsh-glass-ranswork-1.1.1.tgz(解压后是 package/)。

把含 `package.json` 的那一层目录放到任意位置,在安装入口填它的绝对路径,例如:

D:\Plugins\dsh-glass-ranswork
安装器会把依赖写进当前 profile 的 package.json 并激活 bundle,
不需要手动改配置文件。

兼容性

  • 在 DSH 0.2.1-rc.3(Windows 桌面版)上开发与验证(v1.1.1 起);
  • 插件只用到公开客户端服务(slots / locale / theme)和宿主 webServer,

没有私有 API、没有原生依赖;DSH 大版本升级后如果主题 token 改名, 退化结果是「某块颜色/模糊不生效」,不会崩。

  • 每次宿主升级都会重编译客户端,CSS Modules 哈希会全变。插件只在

纯装饰性的卡片前缀上依赖哈希;凡是「排除某个结构容器」的规则一律用 稳定 data 属性或结构判据(详细的坑见 v1.1.1 更新日志)。

卸载

设置 → 插件 → 卸载。插件不会改 DSH 本体;设置文件在 $DSH_HOME/glass-theme.json,壁纸在 $DSH_HOME/glass-theme-bg., 删掉即可彻底复位。

升级

先确认当前版本:设置 → 自定义主题 顶部有 v1.1.1(旧版宿主没有这行, 可以在 profile 的 node_modules/dsh-glass-ranswork/package.json 里看)。

怎么知道有新版本

设置页顶部那行:v1.1.1 后面如果出现「有新版本 v1.2.0」的链接,点它去 Release。 宿主半侧每 6 小时静默问一次 api.github.com 的最新 Release(失败 10 分钟后重试, 全程不打扰;断网时只显示版本号)。

tarball / Release 装的

三步:

  1. 把 profile package.json 里的旧 spec 换成新 tag 的 URL;
  2. 删掉 pnpm-lock.yaml 里对应的 dsh-glass-ranswork@... 条目(或整份 lockfile);
  3. pnpm install,重启 DSH。

或者一步到位:

pnpm add https://codeload.github.com/rans725/dsh-glass-ranswork/tar.gz/refs/tags/v1.1.1

为什么“重装一次”不升级

pnpm 对 tarball 依赖记录的是 spec + integrity + version。spec 没变(还是 .../heads/main.tar.gz)时,它认为这份依赖已经解析过,直接用 lockfile 里的 旧包,不会去远端重新 HEAD。main 更新了、tag 打了,都和你的 lockfile 无关。

只有下面两种情况会真正换包:

  • spec 变了(新 tag 的 URL / 新版本号);
  • 你显式让 pnpm 重新解析(删 lockfile 或 pnpm install --force)。

卡住时的自查

现象 · 原因 · 处理 重装后版本不变 · lockfile 钉住了旧 spec · 换成新 tag 的 URL HEAD https://github.com/.../main.tar.gz ... ETIMEDOUT · github.com 不通 · 改用 codeload 直链 安装返回 changed:false,日志只有 fetch failed · 旧依赖也在拉 github.com,一个失败整次回滚 · 先从 package.json 删掉旧条目再装 设置页没有版本行 · 宿主半侧还是旧版 · 重启 DSH(浏览器半侧热更新,宿主不会)

安装器目前只会把 fetch failed 透出来,不会告诉你是哪个 URL 失败。
遇到时先看 profile 的 package.json 里还有没有 github.com/.../archive/...
的旧条目 —— 通常就是它。

设置

字段 · 默认 · 区间 · 说明 enabled · true · — · 关闭后完全恢复原生外观 opacity · 20 · 0–100 · 表面不透明度 %;20 = 80% 半透明,100 = 不透明 panelOpacity · 85 · 0–100 · 信息面板不透明度 %:弹层、文件预览、统计/费用面板、Modal 内容 blur · 32 · 0–80 · 三列骨架背后那层的模糊半径(px) overlayBlur · 32 · 0–80 · 浮层模糊半径(px):弹层、已归档面板、费用面板、Modal。运行时夹到 56px composerBlur · 24 · 0–80 · 发送框 / 任务卡片模糊半径(px)。运行时夹到 40px;设为 0 关闭这两处 previewOpacity · 85 · 0–100 · 文件预览 / 改动卡片不透明度 %:文件 diff、已编辑文件卡、文档预览 saturate · 180 · 100–200 · 背景饱和度 % ambient · true · — · 是否绘制氛围光背景 accent · aurora · aurora / ocean / sunset / mono · 氛围光配色 bgImage · '' · — · 背景图 token(空串 = 没设图)。只是缓存键,不是文件名 bgFit · cover · cover / contain / stretch / tile / center · 显示方式:填充 / 适应 / 拉伸 / 平铺 / 居中 bgCrop · {x:0,y:0,w:1,h:1} · 每项 0–1 · 自定义裁剪区域(占原图比例,整图 = 0,0,1,1) bgDim · 30 · 0–100 · 背景蒙层不透明度 %(浅色盖白、深色盖黑) bgGuard · true · — · 文字保护:有壁纸时给文字加光晕 + 加深次要文字(不加任何底色) bgAutoTone · true · — · 跟随图片明暗:暗图切深色主题、亮图切浅色,让文字颜色和图片对得上 bgBaseTheme · '' · light / dark / system · 内部状态:自动切换前用户的明暗偏好(空 = 没切过),删图/关开关时还原 bgLumaGrid · '' · — · 内部状态:上传时算好的 32×32 亮度图(base64),自动明暗按裁剪区域查表用

设置页常规是 7 个滑块:表面不透明度 / 面板不透明度 / 背景模糊 / 浮层模糊 / 发送框·任务模糊 / 文件预览·改动卡片 / 背景饱和度。设了背景图之后多一个 「背景蒙层」滑块、两个开关(文字保护 / 跟随图片明暗),并多出整行宽的 「自定义裁剪」区(设图前这些不显示,避免摆一个当前没有作用的控件)。

发送框与任务卡片的底色没有单独一档:它就是 --dsw-specific-input-major (属 SURFACES),跟着「表面不透明度」走。曾经有过 composerOpacity 滑块,实现方式是给卡片刷一层 color-mix(白 N%) 的白底 —— 行内 background 会顶掉卡片自己的 token,拖「表面不透明度」时发送框纹丝不动, 所以已删除。挡住背后的字靠模糊,不靠颜色。

设置持久化在 $DSH_HOME/glass-theme.json(宿主半侧用「临时文件 + rename」原子写入; 坏文件按默认值处理,删掉即可复位)。范围校验以宿主半侧为准。

为什么分成两档不透明度