ISimon3/dsh-theme-skin

dsh-theme-skin

DeepSeek Harness 主题定制插件 — iOS 27 液态玻璃主题:设置页「主题定制」分区 + 顶栏快捷开关,明暗自适应,零依赖 · DSH theme plugin (glassmorphism)

Uncategorizeddeepseek-harnessdsh-themeglassmorphism

dsh-theme-skin

DeepSeek Harness (DSH) 主题定制插件。设置页新增「主题定制」分区,可切换主题 / 恢复默认;首批内置 iOS 27 液态玻璃主题:磨砂玻璃面板 + 流体渐变光斑背景,明暗自适应,零运行时依赖。

参考社区实现:dsh-bloom-theme(工程结构)、DSH-Transparent-UI-Plugin(玻璃质感思路)、本机已验证的 dsh-archive-center(slots API 用法)。

功能

  • 设置页「主题定制」分区:走官方 slots.register({ name: "settings.section" }) API,与 归档会话/桌面设置 并排,非 DOM 注入 hack。面板内:主题卡片(点按切换)+ 「恢复默认」按钮。
  • 顶栏快捷开关:调色板按钮一键在玻璃态 ↔ 原生间切换;找不到顶栏时自动降级为右上角浮空按钮。
  • iOS 27 液态玻璃主题:
    • 流体渐变光斑背景(纯 radial-gradient + transform 动画,不用实时模糊,prefers-reduced-motion 时静止)
    • 玻璃面板:顶栏 / 侧栏 / 输入区 / 气泡 / 菜单 / 弹窗 / 代码块(半透 + backdrop-filter + 玻璃高光边)
    • 明暗自适应:跟随 DSH 官方 body[data-ds-dark-theme] 标记,两套玻璃参数
    • 切换用 View Transitions 做整页 cross-fade,不支持时瞬时生效
  • 恢复默认:移除 body[data-dshskin] 属性即完全回到原生,零残留。
  • 状态存 localStorage(dsh-theme-skin/active),刷新自动恢复。

目录

src/
  index.ts             node 半侧(空 apply,让 cordis 认得这个包)
  client.ts            浏览器半侧入口(注入 CSS / 恢复状态 / 注册分区 / 挂开关)
  theme-state.ts       主题状态:localStorage ↔ body 属性 ↔ 变更广播
  css/theme.ts         iOS 27 玻璃态全部样式(token 层 + 背景层 + 面板层)
  css/ui.ts            插件自身 UI(设置面板 + 顶栏按钮)
  settings-section.ts  官方 slots API 注册「主题定制」分区
  switcher.ts          顶栏快捷开关
  background.ts        流体光斑背景层
scripts/
  build.mjs            esbuild 构建(client.js 为 DSH __ModuleLoader__ 格式)
  install-desktop.mjs  桌面端 profile 安装辅助(改 package.json;链接需手动建)
test/
  mock.html            模拟 DSH 宿主的验证页(slots / 明暗切换 / hash 类名)
  serve.mjs            本地预览服务器(127.0.0.1:8899)

开发

npm install
npm run build          # tsc --noEmit + esbuild
npm run mock           # 另开终端:node test/serve.mjs → http://127.0.0.1:8899

模拟页里点右上角调色板按钮切换玻璃态,点 ☀️/🌙 切明暗,点侧栏「主题定制」看设置面板。

桌面端安装(本机已装)

  1. npm run build
  2. npm run install:desktop —— 写 profile package.json(依赖 link: + bundles)
  3. 建符号链接(管理员/开发者模式,或 junction): New-Item -ItemType SymbolicLink -Path "$env:USERPROFILE\.dsh\profiles\desktop\node_modules\dsh-theme-skin" -Target "<本目录>"
  4. 重载桌面 DSH 页面或重启应用。

回滚:把 ~/.dsh/profiles/desktop/package.json.dshskin.bak 复制回去,删除 node_modules 里的 dsh-theme-skin 链接。

兼容性说明

  • 不硬编码 DSH 的 hash 类名,全部走 [class*="_语义名"] + 官方 --dsw-alias-* token 接管;DSH 改版时最坏情况是部分面板退化为纯 token 换肤(不透玻璃),不会炸布局。
  • 新增主题:在 src/theme-state.ts 的 THEMES 里加一项 + 在 src/css/theme.ts 加对应作用域样式即可,设置面板自动出现新卡片。