dsh-skin

August 13, 2026 · View on GitHub

一个遵循 deepseek-harness 插件规范的可发布皮肤插件:内置多种可切换皮肤(明暗成对的颜色 token 覆盖 + 自托管背景图 + 可选字体),设置页提供卡片式皮肤选择行,选择持久化到 settings 文档、刷新/重启自动恢复。

皮肤预览

Coding星夜
Coding 皮肤星夜皮肤
像素卡哇伊
像素皮肤卡哇伊皮肤

像素详情

特性

  • 5 款皮肤:Coding / 海洋 / 星夜 / 像素 / 卡哇伊,每款都带明暗两套视觉,保留现有 light/dark/system 开关。
  • 完整语义覆盖:皮肤展开器把每个主题映射到 dsh 全部语义 token——应用框架、设置模态、消息气泡、代码块/语法高亮、发送框、侧栏、菜单弹层、滚动条,无一遗漏。
  • 自托管资产:背景图与字体文件经宿主半 /skin-assets 路由服务(带路径穿越防护),包内即可、无需外部 CDN。
  • 可选字体:星夜用马善政楷书、像素用缝合像素、卡哇伊用站酷庆科黄油体(均为 OFL 开源协议,自托管)。
  • 持久化:选择经 /skin-state 路由写入 settings 文档(dsh-skin.skin),刷新/重启恢复;宿主只存字符串、由浏览器校验 id,加新皮肤无需重启宿主。

皮肤列表

皮肤风格背景字体
Coding深色编辑器(白字)coding.png 照片系统
海洋半透明海蓝SVG 海浪系统
星夜星空紫SVG 星空马善政楷书
像素Game Boy 荧光绿、直角平面SVG 像素画缝合像素 Fusion Pixel
卡哇伊粉色小清新kwy.png 照片站酷庆科黄油体

安装与挂载

  1. 构建:pnpm install && pnpm run build(tsc + tsdown,产出 lib/client.js)。
  2. 装进 profile:dsh plugin --profile web add <path-to-this-package>(或 npm 发布后 dsh plugin --profile web add @goodpostidea-tech/dsh-skin)。
  3. 挂载行:用 --patch 引用本仓库的 dsh-skin.patch.yml,或把该行并入你自己的 patch:
- insert:
    - id: skin
      name: '@goodpostidea-tech/dsh-skin'
  1. 启动:dsh --profile web --patch dsh-skin.patch.yml,打开 设置 → 通用 → 皮肤,选择任意皮肤。

皮肤机制

  • 颜色:每个皮肤定义明暗成对的 --dsw-alias-*/--dsw-specific-* token 覆盖,经 ctx.theme.overrideTokens 应用(body 内联变量层,随现有明暗开关自动切换)。
  • 背景图:包内 SVG/图片资产由宿主半 /skin-assets 路由服务;皮肤把 bg-base 覆盖为透明、面板层保持不透明度,照片/插画透出且文字可读。
  • 额外 CSS(可选字段):皮肤激活时注入 <style>(字体 @font-face--dsw-font-family 全站覆盖、直角/去阴影等风格化)。
  • 持久化:选择经宿主半 /skin-state 路由读写(GET/PUT),落在 settings 文档的 dsh-skin.skin 字段;重启恢复。浏览器设置 RPC 对第三方命名空间不暴露(apiproxy allowlist 硬编码),故走自建路由。

开发

pnpm install        # 官方 registry(项目 .npmrc 已固定)
pnpm run build      # tsc + tsdown → lib/index.js + lib/client.js
pnpm run watch      # tsdown --watch

新增一个皮肤:在 src/skins.ts 里加一条 SkinDefinition(填一个 SurfaceSet 调色板即可自动展开成完整 token 集),并把它加进 SKIN_IDS。字体/图片放进 assets/,由 /skin-assets 路由自动服务。

已知限制与后续

  • 皮肤 id 集合在编译期固定(src/skins.ts);暂无运行时加载外部皮肤定义。
  • 宿主与浏览器错位时,旧宿主也能持久化任意 id(浏览器端校验),但视觉上只会应用浏览器认识的皮肤。
  • 背景照片(coding.png/kwy.png)体积较大,后续可考虑压缩或换用 WebP。

License

MIT