vonPaulison/deepseek-harness-custom-background
DeepSeek Harness Web 界面自定义背景插件:主界面/边栏/顶栏三区域独立背景、拖拽定位、不透明度控制、主题色、圆角、缩放
项目介绍Project Overview
这是 DSH Web 界面的外观自定义插件,可为主界面、边栏、顶栏分别上传背景图,支持拖拽定位、不透明度、模糊暗化、主题色、圆角与缩放。适合想个性化 DSH 界面外观时使用。注意:配置与图片仅存浏览器本地,换浏览器或清缓存会丢失,且依赖当前布局选择器,DSH 大版本改版可能需更新。
This is a DSH web UI appearance plugin that lets you upload separate background images for the main area, sidebar, and top bar, with drag positioning, opacity, blur, dimming, theme color, corner radius, and zoom. Use it to personalize the DSH interface. Note that settings and images are stored only in the browser, so clearing cache or switching browsers loses them, and layout selectors may break after major DSH changes.
请帮我了解并安装插件:【deepseek-harness-custom-background】【https://github.com/vonPaulison/deepseek-harness-custom-background】
把上面这条消息直接发给当前会话里的 DSH,让它帮你了解并安装。安装命令不一定准确,发给 DSH 更稳。Send this message to DSH in your current session. CLI install commands may not be accurate across systems — DSH will figure it out for you.
或使用命令行安装(适合开发者)Or use CLI install (for developers)
命令行安装CLI Install
dsh plugin --profile web add github:vonPaulison/deepseek-harness-custom-background
把 vonPaulison/deepseek-harness-custom-background 加入你的 DSH 配置(web profile)即可启用。
READMEREADME
DeepSeek Harness 自定义背景插件(dsh-ui-customizer)
一个用于 DeepSeek Harness (DSH) Web 界面的外观自定义插件。它让你可以给主界面、边栏、顶栏三个区域分别上传背景图片,并自由拖拽定位、调节不透明度,还支持主题色、圆角和界面缩放。
✨ 功能特性
- 三区域独立背景:主界面、边栏、顶栏各自上传图片(自动压缩到 1920px、转 WebP),支持 填充 / 完整显示 / 平铺 三种显示方式
- 自由拖拽定位:在预览图上按住拖拽即可平移图片,展示你想展示的部分;也提供水平/垂直位置滑杆(0–100%)精确控制
- 不透明度语义:0% 完全不可见(显示背景色)、100% 全部可见、值越大越清晰
- 模糊 / 暗化:每个区域可单独加高斯模糊与暗化遮罩(提升可读性)
- 主题色:5 个预设 + 自选颜色,作用于品牌色 token,明暗模式同步生效
- 圆角 / 缩放:全局圆角(0 = 跟随默认)、界面整体缩放
- 无需任何「表面透明度」设置:背景直接绘制在界面表面层上,上传即见
- 健壮定位 + 半透明兜底:运行时定位真正盖住背景的布局元素;定位失败时自动降级为 token 半透明 + body 分层背景,任何结构下都可见
- 内置诊断:一键输出插件版本、各元素定位结果、已绘制元素数、持久化状态等,方便排障
- 配置 JSON 保存在浏览器
localStorage,图片本体存入 IndexedDB(不再受 5MB 配额限制);刷新不丢、多标签页自动同步、可一键重置;IDB 不可用时自动回退内嵌存储
🔧 工作原理
接入方式(标准 DSH 客户端插件)
一个 DSH 客户端插件是一个 npm 包,通过三个约定接入:
| 约定 | 本包实现 |
|---|---|
package.json 声明 "dsh": { "client": { "platform": "web", "inject": [...] } } |
声明浏览器插件及其依赖 |
exports["./client"] 指向成品 bundle |
lib/client.js(手写、零构建) |
bundle 通过 window.__ModuleLoader__.load({ id, factory }) 注册,工厂返回 { apply, inject } |
标准 Cordis 插件 |
宿主侧的 dsh-client-modules 扫描已启用插件行,把 bundle 发布到 /plugins/<id>/client.js 并注入 window.__DSH_BOOT__;Web 外壳内核据此挂载插件。
背景绘制
界面真正「盖住背景」的层是几个布局元素,它们的 background 都是 var(--dsw-alias-bg-*):
- 主界面:布局 frame(
.pI_x6G_frame)+ 会话根(.wSkVaW_root) - 边栏:边栏列(
.pI_x6G_sidebarCol)+ 侧栏壳(.hHd-Xa_root) - 顶栏:会话区
<header>元素
本插件在运行时用 [class*="sidebarCol"] 等选择器定位这些元素,把背景复合值直接设为它们的内联 background,从而绕过「表面透明度」依赖、获得 100% 清晰度。
背景复合值层序:
[洗色层: linear-gradient(底色, 1-不透明度)] <- 实现不透明度语义
[暗化层: linear-gradient(rgba(0,0,0, dim))]
[图片层: url(...) X% Y%/size repeat] <- 位置、显示方式
[底色: var(--dsw-alias-bg-base) 等] <- 自动跟随明暗模式
健壮性与兜底
- 会话根/边栏壳存在嵌套多层结构,插件除「直接子元素」外,还按「背景色 == token 解析色 且 面积足够大 / 命中特定 token」在子树内兜底扫描,结构变化也能命中
- 若主背景一个表面都没定位到,自动启用 token 半透明(0.9) + body 分层背景,保证可见
MutationObserver监听布局元素重挂载(切会话/热更新)自动重绘;theme/change时按明暗模式重刷洗色层;插件卸载时清理所有内联背景- 性能:元素定位结果带缓存,仅布局变更/换肤时重扫,拖动/滑杆只重绘;拖动预览走 rAF 节流;配置写入 trailing 防抖(300ms),页面关闭前自动落盘
📦 安装
前置:已安装 DeepSeek Harness,并运行过一次
dsh web(会自动创建 profile 目录)。
方式 A:一键安装(推荐)
PowerShell 里粘贴这一行即可(自动下载、安装、写入配置):
[Net.ServicePointManager]::SecurityProtocol=[Net.SecurityProtocolType]::Tls12; irm https://raw.githubusercontent.com/vonPaulison/deepseek-harness-custom-background/main/install.ps1 | iex
装完重启 dsh web,刷新页面 → 设置 → 外观自定义。重复运行是安全的(幂等)。
不想直接执行远程脚本的话,也可以先下载
install.ps1看一眼再运行,或改用下面手动方式。
方式 B:官方插件命令(需要 pnpm)
dsh plugin --profile web add <本仓库路径>
然后把下面这段合并进 %USERPROFILE%\.dsh\profiles\web\cordis.patch.yml:
- insert:
- id: ui-customizer
name: dsh-ui-customizer
方式 C:手动安装(无需 pnpm,本包零依赖、bundle 手写无构建)
# 1. 放入 web 配置目录的 node_modules
New-Item -ItemType Directory -Force $env:USERPROFILE\.dsh\profiles\web\node_modules | Out-Null
Copy-Item -Recurse <本仓库路径> $env:USERPROFILE\.dsh\profiles\web\node_modules\dsh-ui-customizer
# 2. 把上面的 insert 段合并进 cordis.patch.yml
生效
- 重启
dsh web(或:若插件行已在运行实例中注册,直接Ctrl+F5强刷页面即可加载新 bundle) - 打开 设置 → 外观自定义 开始使用
⚠️ 设置面板打开时会盖住主界面:上传/调整后请关闭设置面板再查看效果(卡片内的预览图可实时看位置与显示方式)。
🚀 使用
- 进入 设置 → 外观自定义
- 在「主界面背景 / 边栏背景 / 顶栏背景」三张卡片里分别「上传图片」
- 在预览图上按住拖拽定位,或用位置滑杆微调
- 调节不透明度(0=隐藏、100=最清晰)、模糊、暗化、显示方式
- 可选:主题色、圆角、缩放;「重置全部」一键还原
🛠️ 故障排查
如果某个区域的背景没有显示:
- 关闭设置面板再看(面板会盖住主界面)
- 点设置页底部的「运行诊断」,查看:插件版本、三个区域是否已配图、各元素定位结果(frame / 边栏表面 / 顶栏 / 会话表面)、bg-base 解析色、已绘制元素数、明暗模式
- 把诊断输出贴到 issue 里
🧩 自定义扩展
DSH Web 界面是 slot 树,第三方插件可注册/替换任意区域。可用插槽(声明于各 dsh-client-ui-* 包):
- 全局:
root、shell.overlay - 侧栏:
sidebar、sidebar.workspaces、sidebar.settings、sidebar.footer.action - 会话/对话:
conversation.session、conversation.composer(链式,可整体替换输入区)、conversation.chat.node、conversation.chat.turnTail、conversation.input.*、conversation.hero.* - 设置:
settings.trigger、settings.section、settings.general.item、settings.plugins.tab、settings.plugin.item - 工具:
tool.call.toolview、tool.view.cordis、details
注册方式:
// 直接注册(插槽已声明)
ctx.slots.register({ name: "settings.section", id: "...", order: 100, label: "..." }, Component);
// 声明注入(声明者激活后自动注册)
ctx.slots.inject("settings.general.item", () => ctx.slots.register({ ... }, Row));
主题层面:
// 覆盖任意 --dsw-alias-* token(明暗两个值都必须给)
ctx.theme.overrideTokens("你的插件id", { "--dsw-alias-brand-primary": { light: "#4176E6", dark: "#4176E6" } });
// 或注册一个完整可选的第三方主题
ctx.theme.register({ id: "my-theme", colorScheme: "dark", tokens: { ... } });
⚠️ 已知限制
- 设置与图片保存在浏览器本地(配置 JSON 在
localStorage,图片在 IndexedDB):换浏览器/清缓存会丢;远程(非本机)浏览器不同步 - 布局元素通过类名/标签选择器定位(
[class*="sidebarCol"]、header等),DSH 未来大版本若改动结构需同步更新选择器 平铺模式下位置以百分比偏移(图片大于区域时可能无明显位移)- 圆角通过全局 CSS 规则实现(
!important),头像等圆形元素做了豁免,属「尽力而为」 - 界面缩放依赖
zoom,仅 Chromium 系浏览器生效
📁 目录结构
dsh-ui-customizer/
├── package.json # 插件清单:dsh.client 声明、exports、版本
├── lib/
│ ├── index.js # 宿主(Node)半:空插件,让行在 Cordis 树上激活
│ └── client.js # 浏览器半:window.__ModuleLoader__.load 手写 bundle
├── test/
│ └── simulate.cjs # 模拟模块加载器全链路测试(Node 直接运行)
├── LICENSE
└── README.md
测试
node test/simulate.cjs lib/client.js
📄 License
本项目为 DeepSeek Harness 的第三方插件,与 DeepSeek 官方无直接关联;DSH 及 @deepseek-ai/dsh-* 包版权归其各自所有者。
nexu-io/open-design
freestylefly/awesome-gpt-image-2
anywhere-labs/dsh-desktop
walkinglabs/learn-harness-engineering
awesome-dsh-plugin/awesome-dsh-plugin
MemTensor/MemOS