DSH 通用皮肤框架:可视化自定义 + 实时预览 +…
32.9/100
综合分
4
GitHub 星标
129
npm 周下载
—/5
用户评分
数据截至 2026/10/7 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-myskinnpm 源 · dsh-myskin 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · market
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 28 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-myskin @ 0.4.1
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖要求 >=0.1.7-rc.2 <0.3.0 · 最新 0.2.1-rc.2 兼容
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/19 20:27:30
安全扫描自动 · 静态分析源码v2.7.0🟢 扫描:未发现敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery@deepseek-ai/cordis@deepseek-ai/dsh给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
界面预览
5 张 · 点击查看大图功能亮点
- 可视化自定义皮肤
- 实时预览
- 皮肤管理设置页
DSH 皮肤插件:可视化自定义 + 实时预览 + 「皮肤管理」设置页。 非侵入式:不改 DSH 源码 / 配置、不改 DSH 进程;皮肤是完全可逆的覆盖层。 适配:DSH 0.1.7-rc.2 与 0.2.0-rc.1
最近更新
在 GitHub 查看全部 →v0.4.12026-10-06
dsh-myskin 0.4.1 / DSH 全兼容皮肤可视化编辑框架
· 新增
· 兼容模式:「皮肤管理」页新增开关,开启后皮肤不接管背景,可与壁纸 / 玻璃 / 桌面壳特效类插件同时使用。
具体行为:不画 canvas.background 与为此服务的表面透明规则;不写背景类令牌(--dsw-alias-bg-*、--dsw-specific-sidebar-fill)——
正是不透明表面会盖住别人的背景;不发布 html[data-dsh-skin],因此不要求壁纸插件让路(让路会清掉用户的壁纸)。
前景令牌、css 规则、文字替换、注入图层、嵌入图照常生效。
背景图与背景类令牌仍保存在文档中,关掉即恢复;绘制模式的实时预览遵守同一套规则,令牌面板把跳过的条目标注为「兼容模式:不写」。
开关状态写成文档 css 里 :root 上的标记 --dsh-myskin-compat(与背景强度 / 壁纸锚点共用一条规则),
因此不需要重启 DSH,旧宿主也能保存。
· 适配 DSH 原生右侧侧边栏:「区域外观」新增「右侧侧边栏」区域,锚点 [data-dockkit-pane]。
DSH 0.2 自带的右侧栏(文档预览 / 文件 / 浏览器 / 终端等面板)由 dsh-client-ui-sidebar-right 渲染,
data-dockkit-* 只此一包使用(对着本机安装核对过),因此不写死构建哈希;容器 .panel[data-sidebar-right-panel] 故意不做锚点——
它是面板背后那条全高定位带,染它等于给一块用户看不到边的区域上色,而可视面是 pane 本身。
变体的质感与底色同步覆盖右侧栏,避免"左右两侧材质不一致"。
· 变体拆成两个轴,并新增「作用对象」:「卡片材质」拆为质感(模糊 / 边框 / 阴影)与底色(玻璃白 / 卡片色 / 透明)——
一个面由"边框模糊阴影"和"底色"两件事组成,回答的是不同问题;绑在一起时「有玻璃边缘但不盖背景」无法表达,
而这正是与壁纸类插件共存的正解。卡片顶部新增「作用对象」:全部区域,或单独一处(对话区 / 左侧栏 / 右侧侧边栏 /
输入框 / 设置页 / 消息列表),选中一处后这一轮点击只改那一处。
选择按处记录(--dsh-myskin-variant 的条目形如 radius=pill@composer),读回时「全部区域」打底、本处覆盖;
排版令牌与强调色没有分区形态,始终全局,卡片里写明。旧文档的 material=… 自动映射到两个新轴,界面照旧显示真实选择。
· 圆角可四角单独定义(「区域外观」与「变体」都有):统一值(border-radius)之外,左上 / 右上 / 右下 / 左下各一行
(border-top-left-radius 等长属性)。某一角留空=跟随统一值,单独填了只改那一角。
两条值同时存在且都能读回:写角时把简写提到声明块最前面(简写会一次性设置四角,写在后面就会把角盖掉),
只重排、不改写其它声明;整套预设仍然描述整个面(会把四角清掉,回到统一值)。
「变体」里四角是四个子轴(折叠在「圆角」下,点选方式与其它维度同构):每个只写自己的长属性,没点过的角显示「跟随统一圆角」,
作用对象 / 撤销 / 恢复默认对它们与普通轴完全一致。
· 装了壁纸插件就自动进入兼容模式:检测到 dsh-plugin-wallpaper-engine 时(只读它常挂的 data-we-glass-page / data-we-adapter / data-we-wallpaper),
文档里没表过态的皮肤自动不接管背景:装了就说明背景有人管,不必先让用户去找开关。
开关一旦被点过就是明确的决定(--dsh-myskin-compat: 1 / : 0),永远盖过自动检测;「还原默认」清空文档后回到自动。
检测只看 DOM,不读对方配置、不写对方标记;插件中途装上或卸下都会即时生效。
· 变更
· 皮肤包格式改名为 .dshframework(原 .dshskin):「导出皮肤」产出的文件名与导入口的接受列表同步更新,
包内 manifest.json 的 format 字段写作 dshframework、资源引用写作 dshframework:assets/…。
旧包照旧能导入:format: "dshskin" 与 dshskin:assets/… 两种写法都认,.dshskin / .json 也仍在接受列表里——
磁盘上已有的文件不该因为改名而失效。模块随之改名为 src/client/dshframework.ts(测试 tests/dshframework.test.
v0.4.02026-10-02内容较长已截断
· 新增 · 面板可停靠(左 / 右)
· 工具条新增 「⇤ 面板靠左 / ⇥ 面板靠右」:面板与页面内缩一起换边,钉在右侧的组件立刻回到视野里、也重新可点。
· 全流程只有一处状态:。帧样式表仍然在打开绘制模式时只写一次,
两个版式都写在里面,切换只是改一个属性——不重建样式表,也就没有"只换了一半"的中间态。
面板占用的宽度发布为 --dsh-myskin-inset-x(由它指向 --dsh-myskin-inset-left/right,编辑器把两侧都写成同一个实测值),
于是与侧别无关的规则(设置弹窗的高度与宽度上限)只读一个名字,只有 body 的水平 margin 写两遍。
· 跟着换边的还有:上游设置弹窗的收口规则(:has([data-shortcut-modal]) 的 left/right 与 max-width)、
Windows 标题栏分支的 body margin、面板的分隔线与阴影方向、入场/收起的滑动方向、折叠按钮的箭头。
· 切换走 useLayoutEffect:属性与面板在同一次提交里翻面。若写成普通 effect,会有一帧"面板已经在左边、页面还空着右边"的
340px 跳变(挂载时则是面板短暂压住它本该让出的那一条)。
· 偏好记在浏览器 localStorage(键 dsh-myskin.dock),不进皮肤文档:它描述的是这台机器上的插件、不是皮肤,
也天然绕开宿主 schema,所以本版不需要重启 DSH。坏值 / 隐私模式 / 存储被拒一律退回默认(右侧),读写全程 try/catch。
· 新增 · 被面板压住的东西,面板自己说
· 打开绘制模式后,编辑器每 1.5 秒(不是每帧)在面板区域内按 2×4 的网格做几次命中测试:
跳过本插件自己的层与 html/body/#root,剩下的第一个元素就是"被面板压住的东西"。
工具条第 2 行随即出现 ⚠ 面板挡住了 · ⇤ 面板靠左,点一下即换边。
· 判定与绘制模式的选择共用同一个 isOwnElement(本轮从组件内提到模块级,并改用 ownerDocument):
悬停框、点击选中、层级按钮与遮挡扫描不可能各说各话。
· 纯函数(occludingElement / panelSamplePoints / sameElements)与 DOM 包装分开:
没有命中测试能力的环境(jsdom、异形内嵌)返回"没被挡住"而不是抛错;扫描结果不变时保持同一个数组引用,
工具条不会每 1.5 秒重渲染一次。
· 这是诊断,不是裁决:它只报出"面板挡住了谁"和一个可逆的换边入口——不改任何元素、不猜 class 与 z-index、不往页面写东西。
· 新增 · 「全站」作用域(跨界面改同一个组件)
· 起因:部分插件的界面每个界面都出现一份——对话里在 #root 内,插件页 / 设置页是 portal(挂在 #root 旁边)。
画布的选择器是结构化的(#root > div:nth-of-type(3) > … / body > div:nth-of-type(n) > …),一份只能覆盖一处;
而 body > :nth-of-type(n) 那条路还会因为多开一个弹窗而整体错位。整组对这种形状是故意拒绝的(散落各处的类不成组),
所以这类组件此前根本没有"改一次、到处生效"的办法。
· 面板「编辑范围」新增第三个档位 全站(src/client/site-scope.ts):只用元素自身的标识写选择器——
生成的类名、共享的 data-*、role——不带任何祖先路径、不带位置。于是:别的界面里的实例照样命中,
之后新建的实例自动生效,界面结构变化(开弹窗、换视图)也不会让它失效。
· 两条底线,都是"说出来"而不是"悄悄做":没有标识就说没有(只有标签名 → 按钮不可用并说明原因);
太泛就拒绝(命中超过 SITE_SCOPE_MAX=64 处,说明它是布局/工具类而不是组件 —— 报出命中数,绝不写入)。
· 范围始终可见:按钮上写 当前命中 N 处,画布给命中的其余元素描虚线框(最多 24 个,其余由数字承担),面板照常显示"将写入"的完整选择器;
只命中 1 处时也会说明——「这是"这个组件",不是"只有这一个"」,其他界面的实例出现时照样匹配。
· 切换作用域时,已写在该元素上的声明跟着搬到新选择器(moveRuleToBlock,一次快照可撤销),与「整组」同一条路。
· 它写的仍然是普通 css 条目:没有 schema 字段、没有引擎分支,极客模式可见、可单独清除,删除即完全还原
v0.3.92026-09-30内容较长已截断
· 新增 · 回收站(移除的组件可恢复)
· 「移除控件(不占位)」写的是 display: none——元素不再参与命中测试,画布上再也点不中它:一旦保存,这条路就是单行道。
绘制模式右侧面板底部现在有「回收站」,列出当前皮肤移除掉的每一个组件,可单项恢复 / 全部恢复。
它只存在于绘制模式——回收站是"把东西拿回来"的动作,属于正在改皮肤的那只手,不该出现在只读的皮肤管理页上。
· 列表从皮肤文档的 css 派生(removedControls),不是第二份状态:无论移除是怎么进去的、隔了多久、刷新多少次,它都在,
也就不存在"列表与实际不符"的可能。元素仍在 DOM 里(display: none 只是不渲染),所以每条能给出一眼认得出的名字,而不是冷冰冰的选择器。
· 恢复只删掉那条 display(withControlRestored):元素上其它自定义原样保留;移除是它唯一自定义时,整条规则一起消失,不留空壳。
· 恢复立刻可见:只改草稿是不够的——已保存的那份皮肤是另一张同选择器的样式表,它仍然 display: none !important。
新增 naturalDisplayOf():把两张皮肤样式表同步摘出文档(中间不可能发生绘制)量出元素本来该用的 display,再按原位置放回;
编辑器把量到的值写进自己的预览层,直到下次保存把移除彻底带走。撤销、重新移除、保存、应用、还原都会自动清掉这个临时覆盖。
· 修复 · 组件位移抽搐(新坐标与旧坐标来回切换)
三个真实成因,逐个拆掉:
· 拖动时丢声明:手势过去用 withManagedDeclarations 合并规则,而它会丢掉全部受管属性、只把 transform 加回来——
被拖的元素每帧丢一次宽高/内边距/字号,面板预览又每帧补回来,肉眼就是抽搐。新增 transformEdit():只替换 transform 一个属性,其余(含手写极客规则)逐字节保留。
· 两个写者互相覆盖:liveTransform / liveApply 都以渲染闭包里的 draft 为基准,而一次手势跨好几帧——旧基准会把别人刚写的改动悄悄回滚。两者改为 setDraft(prev => …),始终基于 React 待提交的最新状态。
· 草稿样式表排在已提交皮肤前面:applySkin 每次接受设置变更都新建并追加一张样式表,而选择器相同的规则按文档顺序决胜——
于是「保存」之后,已提交的旧坐标开始压过草稿的新坐标,一拖就弹回去。编辑器现在用 MutationObserver 保证自己的草稿样式表始终在 最后(退出编辑器即恢复原状,什么都不留下)。
· 面板不再回声:X/Y/缩放输入框在画布手势期间只是只读镜像(天生慢一帧),过去却被当成事实来源写回规则。新增 transformPreview() 把"谁是写者"变成显式参数:
只有用户真在面板里改过(输入 / 滚轮 / 滑块 / ↺ 重置),字段才是来源;否则原样重发规则里那条 transform——既不回声,也不会把已有的位移弄丢。这条有专门的回归测试。
· 新增 · 本机字体列表
· 新增 src/client/fonts.ts 与「本机字体」按钮:读取这台机器上真正安装的字体,列成可搜索列表,每个名字用它自己的字体渲染,点一下应用到当前元素。
· 主路径是 Chromium 的 Local Font Access API(queryLocalFonts,需要一次用户手势 + 授权);拿不到就退化为候选字体探测(canvas 文本度量,逐个判断候选是否真的存在,候选覆盖 CJK / 无衬线 / 衬线 / 等宽)。
· 「这份列表是哪来的」写在列表顶部(本机 / 探测 / 授权被拒),不把两种来源混为一谈;scanFonts() 永不抛错,环境再差也只是列表短一点。
· 本机字体不进皮肤文档:列表是本机事实,皮肤里存的仍然只是 font-family 字符串。
· 新增 · 嵌入图片的锚定(跟随 文字 / 内置组件 / 元素)
· 过去一张嵌入图只能跟着"当初嵌入时选中的那个容器"(一条结构选择器),页面一改版就可能跑到别的节点上或干脆消失。
现在每张图都有自己的 锚点(EmbeddedImage.anchor),面板上可随时改:
- 元素:结构选择器(原来的行为,也是旧文档的默认);
- 文字:跟着这段文案——按钮换了措辞、React 重建了节点,只要那行字还在,图就还在它身上("选中那行字 → 取选中文字"一步完成);
- 内置组件:从目录里挑固定部位(整个应用 / 应用外框 / 对话主列 / 会话
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成dsh-myskin (v0.4.1)
DSH 全兼容皮肤可视化编辑框架:在真实界面上点选即可改外观、配色、字体与排版,并把整套皮肤导出为 .dshframework 皮肤包分享给他人。
Web 与 Desktop 共用同一套客户端插件管线。皮肤是一层完全可逆的覆盖层:不修改 DSH 源码、不触碰 DSH 进程;关闭开关或点「还原默认」即回到原生外观(皮肤库里已保存的皮肤不受影响)。
已声明兼容适配 dsh-wallpaper-engine(壁纸引擎):装了就自动让出背景,卸载/关掉即恢复。
适配 DSH 0.1.7-rc.2、0.2.0-rc.1、0.2.0-rc.2(Web 与 Desktop)。npm run check:types 逐字段对照本机安装的 DSH 校验。
目录
- 这是什么
- 界面预览
- 0.4.1 要点
- 0.4.0 要点
- 能做什么
- 绘制模式
- 皮肤包 .dshframework
- 安装
- 快速上手
- 数据与持久化
- 让 AI 设计主题(/dsh-myskin)
- 常见问题
- 兼容性
- 许可
这是什么
- 不侵入:所有改动写在插件自己的条目里(皮肤文档 + 一个自有 ),不修改 DSH 的源码、配置与进程。
展开完整文档(README 剩余 1 节)
dsh-myskin (v0.4.1)
DSH 全兼容皮肤可视化编辑框架:在真实界面上点选即可改外观、配色、字体与排版,并把整套皮肤导出为 .dshframework 皮肤包分享给他人。
Web 与 Desktop 共用同一套客户端插件管线。皮肤是一层完全可逆的覆盖层:不修改 DSH 源码、不触碰 DSH 进程;关闭开关或点「还原默认」即回到原生外观(皮肤库里已保存的皮肤不受影响)。
已声明兼容适配 dsh-wallpaper-engine(壁纸引擎):装了就自动让出背景,卸载/关掉即恢复。
适配 DSH 0.1.7-rc.2、0.2.0-rc.1、0.2.0-rc.2(Web 与 Desktop)。npm run check:types 逐字段对照本机安装的 DSH 校验。
目录
- 这是什么
- 界面预览
- 0.4.1 要点
- 0.4.0 要点
- 能做什么
- 绘制模式
- 皮肤包 .dshframework
- 安装
- 快速上手
- 数据与持久化
- 让 AI 设计主题(/dsh-myskin)
- 常见问题
- 兼容性
- 许可
这是什么
- 不侵入:所有改动写在插件自己的条目里(皮肤文档 + 一个自有 ),不修改 DSH 的源码、配置与进程。
- 可逆:每个字段可逐项清除,关闭「启用皮肤」或点「还原默认」即精确还原——「还原默认」只清外观,不动皮肤库里已保存的皮肤。
- 可视化:内置绘制模式,在真实页面上点选元素改样式、改文字、换字体、调位置,边改边看。
- 可搬运:整套皮肤连同图片与字体打包为 .dshframework,换机器或换 profile 一键导入。
界面预览
以下截图来自 DSH Desktop(Windows)。示例皮肤在原生外观上做了七处改动:主题色、壁纸、文字替换、字体、移除组件、在侧边栏嵌入一张 正片叠底 混合模式的图片,以及在对话区嵌入一张装饰图。
应用效果
应用了皮肤的 DSH 主界面
主界面。 侧边栏的全身立绘与对话区右侧的装饰图都是嵌入图片,问候语与输入框提示文字为文字替换,整体配色来自预设主题的令牌,背景为壁纸。
对话中的皮肤效果
对话界面。 输入区右侧的装饰图跟随输入区,会话内容与背景保持可读(图中对话内容已由本人打码)。
设置页面
设置 →「账号与余额」中的嵌入图
账号与余额页。 页面上的人物图是按设置页作用域嵌入的图片,只在这一页显示(图中账号信息已打码)。
设置 →「皮肤管理」
皮肤管理页。 预设主题、启用开关、兼容模式、绘制模式入口、皮肤库,以及 .dshframework 的导出与导入。
绘制模式
绘制模式:图片页签中的嵌入图清单
绘制模式。 顶部为工具条(保存状态、撤销重做、嵌入图片、对齐、面板停靠),右侧为编辑面板;图中打开的是「图片」页签,列出皮肤里的四张嵌入图(各自带锚点解析状态与选中、移除操作),画布上同时可见侧边栏与对话区两张嵌入图的选中框与缩放手柄。
致谢
截图示例皮肤使用的侧边栏插画由 @zhangyuzhangyu233 提供,在此致谢。
0.4.1 要点
- 「还原默认」真的能还原了:绘制模式里那一个此前只丢草稿,页面仍被已写入的皮肤画着(看起来"点了没反应");极客模式里那一个此前只清空代码框,规则本身留在文档里。现在两者都改动皮肤文档本身。
- 不再吃掉皮肤库:皮肤管理页那一个此前会把保存过的命名皮肤一并删掉,现在只清当前外观。
- 确认按钮不再叫「保存」:还原的二次确认里,真正执行还原的那个按钮此前复用了「保存」这个文案。
- 与壁纸插件共存:应用皮肤时通过 html[data-dsh-skin] 告知 dsh-plugin-wallpaper-engine 让路,壁纸在皮肤停用后自动放回;对方壁纸在台时本插件不抢画布。详见兼容性。
- 写入失败不再显示成绿色成功:保存 / 还原被宿主拒绝时按告警色显示,并点名被拒字段。
- 新增「兼容模式」:一键让皮肤不接管背景——不画背景图、不写背景类令牌(--dsw-alias-bg-、--dsw-specific-sidebar-fill)、区域 / 面板底色也不写,同时不要求壁纸插件让路;配色、边框、按钮、规则、文字、图层照常。适合与壁纸 / 玻璃 / 桌面壳特效类插件同时使用。
- 移除「实时预览」按钮:它做的事(写入 enabled: true 并关闭设置弹窗)与「启用皮肤」开关重复,且名字承诺了它没有的"不写入"。
绘制模式内的即时预览不变。
- 适配 DSH 原生右侧侧边栏:「区域外观」新增「右侧侧边栏」区域(锚点 [data-dockkit-pane]),变体的质感与底色同样覆盖它。
- 变体拆开并可指定作用对象:质感(模糊 / 边框 / 阴影)与底色分成两个维度,「玻璃 + 透明」=有玻璃边缘但不盖背景;卡片顶部新增「作用对象」,选中某一处后这一轮点击只改那一处,选择按处记录。
- 装了壁纸插件就自动进入兼容模式:检测到 dsh-plugin-wallpaper-engine(它常挂的 data-we- 标记)时,没表过态的皮肤自动不接管背景;点一下开关即明确关闭,且这个决定会盖过自动检测。
0.4.0 要点
- 面板可停靠左右:面板与页面内缩一起换边,被面板压住的固定定位组件重新可见、可点选。
- 遮挡自诊断:面板压住其他元素时,工具条报出被压住的对象并提供一键换边。
- 「全站」作用域:只用元素自身标识写选择器,跨界面改同一个组件,之后新建的实例同样生效。
- 「界面显示」:按界面控制组件显示或不显示,含三个常用预设与访问过的页面记忆。
- 层级与叠放诊断:z-index 字段,以及「填了没变化」的三类成因与置顶 / 置底。
- 对话排版:markdown 的字号行高走令牌、间距走规则,锚点不写构建哈希,compact 变体不受影响。
- 变体:四个维度加四个整套,点选即可换一整套观感,不需要编写 CSS。
- 图片:每张图独立面板、层级可选、不可见原因诊断、GIF 保留动画、可选边缘晕染。
- 令牌类改动实时生效:绘制模式中即时预览,无需先点应用。
逐条变更与取舍见 CHANGELOG.md。
能做什么
皮肤管理页(设置 →「皮肤管理」)
| 能力 | 说明 |
| 启用 / 停用 | 一键开关整套皮肤,停用即完全还原 |
| 兼容模式 | 不接管背景:不画背景图、不写背景类令牌、不要求壁纸插件让路;配色 / 边框 / 按钮 / 规则 / 文字 / 图层照常 |
| 预设主题 | 深海 / 暖阳 / 粉黛,走官方令牌通道,文字对比度经校验 |
| 绘制模式 | 在真实页面上可视化编辑 |
| 皮肤库 | 保存、重命名、排序、复制、加载、删除多个命名皮肤 |
| 导出 / 导入 | 皮肤包 .dshframework |
| 还原默认 | 清空整套皮肤并停用,回到 DSH 原生外观;皮肤库里已保存的皮肤保留 |
兼容模式(不接管背景)
别人在画背景时用它:壁纸引擎、玻璃 / 背景类插件、桌面壳特效。开启后本插件变成页面上的客人——
- 不画 canvas.background 背景图,也不写为此服务的表面透明规则;
- 不写背景类令牌(--dsw-alias-bg-、--dsw-specific-sidebar-fill)——正是这些不透明表面会盖住别人的背景;
- 不发布 html[data-dsh-skin],也就是不要求壁纸插件让路(让路会把用户的壁纸清掉,正是本模式要避免的)。
在背景前面的一切照常:前景令牌(文字 / 边框 / 品牌 / 按钮)、css 规则、文字替换、注入图层、嵌入图。
令牌面板会把被跳过的条目标注为「兼容模式:不写」,绘制模式的实时预览同样遵守本模式,免得预览承诺一个保存后不会出现的背景。
自动开启:检测到壁纸插件 dsh-plugin-wallpaper-engine 时(读它常挂的 data-we-glass-page / data-we-adapter / data-we-wallpaper),没表过态的皮肤自动进入兼容模式——装了就说明背景有人管,不必先让用户去找开关。
点一下开关即写入明确的开关状态(--dsh-myskin-compat: 1 / : 0),明确的决定永远盖过自动检测;「还原默认」清空文档后回到自动。这条检测只读 DOM,不读对方任何配置,也不写它的任何标记。
背景图与背景类令牌仍然保存在文档里,关掉本模式即原样恢复;开关状态写成文档 css 里的标记 --dsh-myskin-compat,因此不需要重启 DSH(新增顶层字段才需要)。
绘制模式
入口:设置 →「皮肤管理」→ 绘制模式。打开后设置弹窗关闭,真实页面内缩,顶部出现工具条,一侧出现面板(默认右侧)。
编辑直接作用于真实页面,不是副本。
面板停靠与遮挡
- 工具条的「⇤ 面板靠左 / ⇥ 面板靠右」把面板连同页面内缩整体换到另一侧。
- 页面内缩使用 body 的 margin,只影响应用自身的布局;第三方插件若把界面固定在窗口右侧(position: fixed),不会跟随内缩,从而停在面板下方。换边即可解决。
- 面板压住其他元素时,工具条第二行显示被遮挡的元素名,该行本身即换边按钮。扫描每 1.5 秒一次。
选择元素
- 选择模式:悬停显示虚线框与元素标签,点击选中;交互模式:正常使用页面,点击不会误选。
- 面板顶部提供父级 / 子级切换(Alt+↑、Alt+↓),按真实 DOM 逐级移动。
- 快捷键:Esc 取消选择(再按退出并保存)、Ctrl/Cmd+Z 撤销、Ctrl/Cmd+Shift+Z 重做;输入框内不抢占按键。
编辑范围
- 仅此元素:写入该元素的结构选择器。
- 整组:写入同类元素的公共选择器,侧栏中改一次「工作区行」,所有工作区(含之后新建的)一起生效。
工作区行([role="treeitem"][aria-expanded])与对话行([role="treeitem"]:not([aria-expanded]))按 ARIA 语义区分,
不依赖构建期类哈希。面板显示将写入的选择器与当前命中数量;无法识别同类组时按钮不可用。
整组时另有间隔字段,只调整成员彼此之间的距离,第一个成员与容器顶部的距离不变;成员不是相邻兄弟时该字段不出现并说明原因。
文字替换始终只作用于当前元素。
- 全站:以元素自身的标识(生成的类名、共享的 data-、role)生成不带祖先路径的选择器,适用于在对话、插件页、设置页各渲染一份的组件。画布为命中的每个元素描虚线框,按钮显示命中数量。
元素没有可复用标识或标识命中过多(超过 64 处,属布局类)时按钮不可用并说明原因。
只出现在设置页或插件页的元素,可先切到「交互」打开设置弹窗,再切回「选择」进行点选。
界面显示
- 「界面显示」卡片按界面逐行控制:设置弹窗一行、当前页面一行,每行可选显示或不显示,右上角标出当前所在界面。
- 写入的规则形如 body:has(<界面标记>) <组件标识> { display: none !important },组件标识沿用「全站」的判定,因此「每个界面各渲染一份」与「单一全局节点」两种形态都适用。
设置弹窗使用 data-shortcut-modal;每个页面使用自身的语义标记(插件页 [data-plugin-panel],对话页 data-conversation-region 等)。
注意插件页不是设置弹窗的一页,需要用「本页」那一行单独控制。
- 访问过的页面会被记住(最多 8 个),无需再次切换即可开关。
- 三个常用预设:只在本页显示(一条反向规则覆盖所有其他界面,包括尚未打开过的页面;浮层界面额外补一条)、 到处都不显示、全部恢复显示。
- 每行的状态同时考虑本界面规则、全局规则与其他界面的反向规则;恢复路径包括「全部恢复显示」、隐藏全部界面时的就地警告,以及回收站。
- 只修改 display,同一选择器上的其他声明原样保留,删空即整条消失。
- 不做「某个具体设置页」的匹配:设置导航各页只能靠标签文字区分,按序号或类哈希写在插件增加设置页或 DSH 升级后会隐藏错误的对象。
改样式
- 字段分为文字 / 盒子 / 外观 / 位置与缩放 / 元素操作五组,标题带「自定义 N」计数,每个生效字段可单独清除。
- 改动即时预览;隐藏控件(保留占位)与移除控件(不占位)都是纯 CSS,不删除真实节点。
- 回收站列出被移除的组件,可单项或全部恢复;恢复只删除对应的 display 声明。即使移除已保存进皮肤,恢复也立即生效——编辑器会量出元素本来的 display,在预览层中压过已提交规则,直到下次保存。
- 取值一律走 --dsw- 令牌与真实 CSS,深浅色主题自动跟随。
位置与缩放
- X / Y 位移与等比缩放,数值框支持滚轮微调(X/Y ±1px、缩放 ±0.05,按住 Shift 步长放大)。
- 画布上左上角手柄拖动为双轴移动,右下角手柄拖动为等比缩放;每个轴可单独重置,也可一次重置三轴。
- 对齐线:移动或缩放时与同级元素、父级元素、视口中线在 4px 内吸附并绘制对齐线;按住 Alt 临时关闭,工具条可整体开关。
- 层级(z-index):数值输入、滚轮微调、常用值(0 / 10 / 100 / 1000)与独立清除。清空字段即从规则中删除该属性。
填写后无变化时,字段下方说明属于哪一类原因:元素未定位(提供「设为 relative」)、祖先形成层叠上下文天花板(指明祖先与原因)、没有重叠元素(此时改数字不应有变化)。诊断同时列出真实竞争者的层级,并给出「置顶(max+1)」「置底(min-1)」。
- 只做视觉位移与缩放,不改变布局流;归零即删除 transform。
- 拖动期间只改写 transform,元素上的宽高、内边距、字号等自定义保持原样;面板数字为只读镜像。
草稿样式表始终排在已提交样式表之后,保存后继续拖动不会被旧坐标覆盖。
文字与字体
- 编辑文字:自动定位承载文字的节点(含灰色默认占位文字),边输入边预览,回车或点击写入草稿。
- 字体:可填任意字体栈或从建议列表选择(PingFang SC、Microsoft YaHei、Noto Sans CJK SC、HarmonyOS Sans、JetBrains Mono 等)。
- 本机字体列表:读取本机已安装字体,可搜索、点击即应用,每项以自身字体渲染。
Chromium 内核使用 Local Font Access API(首次需要授权);不可用时退化为候选字体探测。列表顶部标明来源。
- 嵌入字体:.woff2/.woff/.ttf/.otf(上限 30 MB)随皮肤保存;超过 2 MB 时提示代价。
- 整站字体(界面 / 正文 / 代码):三行独立,可各自清除。界面走 --dsw-font-family;正文覆盖对话内容与 markdown(不写 !important,段落中的行内代码仍使用代码字体);代码走 --ds-font-family-code。
每行提供「本机」按钮,写入时附带同类兜底字体。
区域外观
- 「区域」页签把整个面作为对象调整:对话区、侧边栏、右侧侧边栏、输入框、设置页、消息列表。
每个区域可设背景色、圆角、阴影、背景模糊、边框(色 / 宽 / 是否显示)、内边距、间距、不透明度。
- 锚点使用类名语义半截([class="_sidebarCol"])或 DSH 自身的 data- 钩子(右侧栏 [data-sidebar-right-panel][data-sidebar-right-open] 与 [data-dockkit-pane]、输入框 [data-composer-card]、设置页 [data-shortcut-modal]、消息列表 [data-conversation-content]),不写构建哈希。
右侧侧边栏是 DSH 自带的那一栏(文档预览 / 文件 / 浏览器 / 终端等面板)。它不是单个元素,所以锚点有三个:面板本身
[data-sidebar-right-panel][data-sidebar-right-open](「开始」引导态没有 pane,只有它能命中;[data-sidebar-right-open] 半截保证关闭时不留下色块——
那个容器关闭时仍挂在布局里)、已停靠的 pane [data-dockkit-pane] 与浮层 pane [data-dockkit-float](与面板拿同一个圆角,否则方角子元素会盖住圆角)。
- 三个整套预设:玻璃(半透明 + 背景模糊 + 大圆角 + 轻阴影)、纸片(不透明 + 中圆角 + 中阴影)、极简(只留圆角)。
预设描述整套观感,未提到的字段会被清空,不保留上一次的残留。
- 圆角可四角单独定义(「区域外观」与「变体」都有):上面一个统一值(圆角:直角 / 小 / 中 / 大 / 胶囊),下面四行分别给左上 / 右上 / 右下 / 左下;某一角留空=跟随统一值,单独填了只改那一角,统一值继续管其余三角 —— 两者的取值都能从文档读回,卡片不会显示成「清空了」。
- 每个区域一条规则(多字段合并),取值从文档读回,卡片顶部显示本页命中元素数量;锚点失配时明确提示。
- 规则带底色时会写下自有标记 --dsh-myskin-panel:兼容模式据此只摘掉底色一条声明(圆角 / 模糊 / 边框 / 内边距照常),手写规则不受影响。
对话排版(Markdown)
- 「对话」页签管理 DSH 生成出来的 markdown。锚点为渲染器自身的根元素([class="_markdown"],取类名语义半截),并通过 :not([data-markdown-variant="compact"]) 排除工具预览与折叠思考的 compact 变体。
- 类型走令牌:正文字号与行高、H1–H4 字号、行内代码与代码块字号、行内代码与代码块底色、链接色,写入 DSH 的 --dsw-font-markdown- 分量令牌,字号、行高、字重一起变化。
- 间距走规则:正文与列表间距、标题上下间距与字重、列表条目间距与标记色、引用边框与底色、行内代码内边距与圆角、代码块背景与内边距、表格边框与表头、链接字重、分隔线与图片。
- 紧凑 / 标准 / 宽松三个密度预设;恢复默认只删除本卡片写入的内容,手写规则与其他令牌不受影响。
- 范围可选全部 markdown 输出或仅对话正文(data-conversation-content 内)。
- 令牌类改动在绘制模式中即时预览;空字段以灰字显示本页当前生效值(读取 CSS 变量的计算值)。
卡片顶部显示本页 markdown 命中数,锚点失配时显示 0。
变体
- 「变体」页签位于面板首位,是唯一不需要 CSS 知识的入口。
- 先选作用对象:全部区域,或单独一处(对话区 / 左侧栏 / 右侧侧边栏 / 输入框 / 设置页 / 消息列表)。
选中一处时,这一轮点击只改那一处——不用为了"只改输入框"再跑去「区域」页签。
- 五个维度:质感(玻璃 / 描边 / 无)、底色(玻璃白 / 卡片色 / 透明)、圆角(直角 / 小 / 中 / 大 / 胶囊)、密度(紧凑 / 标准 / 宽松)、强调色(跟随主题 / 蓝 / 紫 / 青 / 粉)。
- 质感与底色分开是有意的:一个面由"边框 / 模糊 / 阴影"和"底色"两件事组成,回答的是不同问题。
玻璃 + 透明=有玻璃边缘但不盖背景,与壁纸类插件共存时这就是正解;绑在一起时只能整套接受。
- 圆角可四角单独调:「圆角」下面是折叠的「四角单独调」,四个角各自点选直角 / 小 / 中 / 大 / 胶囊。
没点过的角显示「跟随统一圆角」,点过的那一角只改自己——统一值与单角值同时存在,两者都能读回。
- 四个整套:玻璃通透、纸片清爽、极简安静、张扬(各自把五个维度选一遍)。
- 每个选项幂等地写入它拥有的全部属性,切换不残留;写入的是区域规则、排版令牌与品牌令牌。
- 选择按作用对象分别记录(:root 上的 --dsh-myskin-variant,形如 radius=pill@composer):读到某一处时,「全部区域」的选择打底、该处自己的选择覆盖其上,与页面上真实的层叠一致。
- 排版令牌与强调色始终全局(DSH 没有分区形态),卡片里写明这一点。
- 「变体」与「区域」「对话」写的是同一批属性,后改的覆盖先改的。
面板页签
- 编辑面板分为七个页签:变体、组件(元素 Inspector 与回收站)、图片、文字、对话、区域、画面(壁纸与令牌)。
- 画布上的选择会自动切换到对应页签;页签状态记录在浏览器本地。
画面
- 背景图与背景强度:强度滑块拖动即时预览,松手自动保存。可选项「壁纸跟随对话区」让对话列锚定自身的框,侧边栏展开或收起时自动重新居中(纯 CSS,无脚本);侧边栏仍使用整页那一份,两侧取景因此不同。
- 嵌入图片:先选中容器再选图,可拖动、缩放、调整不透明度与混合模式。
- 边缘晕染:每张图可设晕染宽度(0–200px)与柔化(边缘过渡曲线 0–100,不做模糊)。
几何为向外晕出宽度的 1/4、向内吃掉 1 倍宽度,图片不发生位移。
- 层级:可选自动 / 内容之下 / 内容之上。自动由混合模式决定;设置页这类子元素不透明的容器中, "内容之下"会被内容盖住,改为"内容之上"即可。
- 不可见诊断:锚点解析不到、按设置页作用域收起、被容器内容盖住、被容器裁剪,四种成因分开报。
- GIF 动图:按字节识别,按原始字节嵌入、不重编码,动画完整;超出约 3 MB 预算时退回静止图并提示只保留第一帧。
新嵌入的图片按自身比例放入 320×240,小图不放大。
- 每张图一个面板:标题行为宿主 + 解析状态 + 选中 / 移除,展开后是该图自己的设置(锚点、「选中容器」、呈现方式、不透明度、混合模式、位置与大小)。展开即选中,画布上选中也会自动展开。
- 图片选中与组件选中互斥:选中图片时页面只保留这一个框,面板顶部切换为图片头卡;Esc 依次退出图片、组件、编辑器。
元素选中仍然保留为锚定操作的对象。
- 两种呈现方式:组件嵌入画在组件内部(在组件背景之上、内容之下,随组件被裁剪);组件锚定画在组件之外的独立图层(不吃点击,可超出组件范围,不修改宿主元素的定位与裁剪)。
- 锚点:元素(结构选择器,默认)、文字(跟随该段文案)、内置组件(整个应用、应用外框、对话主列、会话内容区、输入区、输入框、新对话占位文字、工作区会话树)。锚点暂时找不到时图片保持不动并等待页面回来,面板显示解析状态。
改锚点即时生效。整组范围下锚点为整组,一张图贴到同类的每个元素上,之后新建的成员自动包含。
- 令牌面板:按背景、边框、品牌色、文字、按钮、交互分组,逐项覆盖 --dsw-。
- 工具条可收起面板查看整页,也可将面板停靠到左侧;面板、工具条与选中框均为插件自有层,退出即消失。
保存、应用与退出
| 按钮 | 行为 |
| 保存 | 写入皮肤文档并留在绘制模式继续编辑,不改变皮肤的启用状态 |
| 应用 | 写入并启用,然后退出绘制模式 |
| ✕ 关闭 | 直接关闭并放弃未保存的改动(页面回到皮肤文档的状态);第二次 Esc 同义 |
| 还原默认 | 二次确认后把空文档写进皮肤文档(不只是丢草稿),页面真正回到原生外观;撤销栈留一步,Ctrl+Z 可把整套皮肤取回草稿 |
皮肤包 .dshframework
「导出皮肤」产出标准 ZIP(任何解压工具均可打开),配置与素材分开存放:
| 条目 | 内容 |
| manifest.json | 完整配置:令牌、CSS、文字替换、画布、图层、皮肤库,以及格式版本、生成器、时间戳与资源清单 |
| assets/… | 原始图片与字体文件(不是 base64) |
| README.txt | 包内说明 |
- 体积:素材以二进制存放。一份实测主题由 351 KB 的 JSON 变为 141 KB 的皮肤包。
- 可替换素材:解开包,替换 assets/ 中的同名同格式文件,重新打包即可导入。
- 兼容:旧版 .json 导出仍可导入;包内资源缺失或损坏会明确报错,不会导入不完整的皮肤。
安装
本插件是 profile bundle(包内自带 cordis.patch.yml,声明条目 dsh-myskin),安装即"放入某个 profile 的 node_modules 并在该 profile 的 dsh.profile.bundles 中声明一次"。
使用 DSH 内置的「添加插件」
打开 设置 → 插件(Plugins)→ 添加插件,填入下列任意一种地址,选择安装源后点「安装」:
| 输入 | 例子 | 说明 |
| GitHub 仓库地址 | https://github.com/WTStarMark/dsh-myskin | 走 git 安装;也可写 github:WTStarMark/dsh-myskin,需要固定版本时加 #v0.4.0 |
| npm 包名 | dsh-myskin | 走所选安装源(registry.npmmirror.com 为中国大陆镜像) |
| 本地目录路径 | ~/dsh-plugins/dsh-myskin-0.4.0 | 等价于 link:,修改源码即时生效 |
- 安装源只影响 npm 包;填入 GitHub 地址时走 git,不受其影响。
- 安装由 pnpm 执行,机器上需要有 pnpm。
- 安装完成后插件管理器会自动把 dsh-myskin 写入当前 profile 的 dsh.profile.bundles,不需要手动改配置。
- 界面会提示:插件暂不支持自动更新。升级时先在插件页卸载,再安装新版本。
- 只为桌面端安装时,在桌面版中对同一地址再安装一次(Web 与 Desktop 是两个 profile,皮肤文档各自独立)。
验证安装
1. 设置中出现 「皮肤管理」。
2. 仅用命令行确认宿主半区(<pkg> 为实际安装目录):
node --input-type=module -e "const m = await import('<pkg>/lib/index.js'); console.log(Object.keys(m))"
期望输出:[ 'Config', 'apply', 'name' ]
注册随包技能(可选)
插件包内自带 skills/dsh-myskin/SKILL.md,说明皮肤文档的字段与语义、绘制模式的各项契约、.dshframework 的读写格式与可逆性要求。
注册后助手在讨论、编写或排查皮肤时会自动加载:
DSH_HOME="${DSH_HOME:-$HOME/.dsh}"
ln -sfn /path/to/dsh-myskin/skills/dsh-myskin "$DSH_HOME/skills/dsh-myskin"
技能是目录包($DSH_HOME/skills/<名字>/SKILL.md,frontmatter 含 name / description / whenToUse),由 skill-filesystem 服务商扫描并热监听,建立链接后不需要重启。删除该链接即注销,不影响插件本身。
卸载与回滚
- 在插件页对该插件选「卸载」,它同时会从 dsh.profile.bundles 移除条目。卸载后刷新页面(改过 schema 的版本再重启一次 DSH)。
- 皮肤文档仍保留在该 profile 的 cordis.patch.yml 中;需要彻底清理时先「导出皮肤」备份,再删除该条目。
快速上手
1. 设置 →「皮肤管理」:选择一个预设主题,点「应用」。
2. 点「绘制模式」:在真实页面上点选元素,修改颜色或字号,或使用「编辑文字」直接改文案。
3. 保存(继续调整)或 应用(写入并退出)。
4. 导出皮肤得到 .dshframework 备份,换机器或换 profile 时导入即可。
数据与持久化
- 皮肤文档保存在该 profile 的 cordis.patch.yml(插件条目 dsh-myskin 的 config)。
- 文档随 profile 走,Web 与 Desktop 的皮肤互不共享,使用 .dshframework 搬运。
- 皮肤库可保存多套命名皮肤,随时切换。
- 关闭「启用皮肤」即完全还原页面,文档仍保留。
- 「还原默认」把外观清空并停用;皮肤库(命名皮肤及其素材)不在此列,始终保留。
- 「兼容模式」与背景强度 / 壁纸锚点一样,写成文档 css 里的一条 :root 标记(--dsh-myskin-compat),因此旧宿主也能保存,且与其它标记共用同一条 :root 规则。
让 AI 设计主题(/dsh-myskin)
在输入框输入 /dsh-myskin 即开始一次主题设计:宿主插件把一段引导交给助手,助手据此加载随包技能、确认偏好、给出方案并落地。
| 输入 | 结果 |
| /dsh-myskin | 先询问四项偏好(明暗、主色或氛围、字体、是否需要图片),再给出 1–2 套方案 |
| /dsh-myskin 深色 + 青色,界面用等宽字体 | 按给定方向直接进入方案设计 |
| /dsh-myskin 做成浅色纸质,正文要衬线 | 同上,方案写到令牌级(背景、表面、边框、文字档位、品牌色) |
交付内容包括:使用的令牌与规则、对比度校验结果(正文 ≥ 4.5:1 等底线)、还原方式、导出 .dshframework 备份的方法。
落地方式有两种:由助手生成 .dshframework 后在「皮肤管理 → 导入皮肤」中选择,或给出可粘贴的清单手动填写。
助手不会直接修改 profile 配置:皮肤文档存放在其中,属于只读范围;所有改动都由你在界面中确认。
前提:该命令在 0.3.9 加入宿主半区,升级到该版本或更高需要重启一次 DSH 才会出现在 / 菜单中;仅样式与预设的升级不需要重启。
另需注册随包技能(见上节)。
常见问题
Q:启动时报 dsh-myskin (dsh-myskin): failed to import?
该信息由 DSH 启动器在 Loader 未取得 fiber 时记录,真实异常被吞掉。按顺序排查:
1. 目录名与位置是否正确:必须是 $PROFILE/node_modules/dsh-myskin,其中应能看到 lib/index.js 与 cordis.patch.yml;
2. 宿主半区能否独立导入:node --input-type=module -e "await import('<pkg>/lib/index.js')",能打印 Config,apply,name 即正常(lib/index.js 自带依赖,解压、拷贝、软链三种装法都不需要 node_modules);
3. 该 profile 的 dsh.profile.bundles 中是否写入了 dsh-myskin;
4. 仍不生效则重启 DSH。
Q:点「应用」提示保存失败?
多为文档过大。壁纸与嵌入图会按最长边自动压缩,嵌入字体按原样保存:超过 2 MB 会明显拖慢每次保存,过大时可能被拒绝。
建议整站字体使用系统字体名,或使用子集化后的 .woff2。
Q:提示「保存失败:canvas」?
该提示表示画布字段被宿主拒绝(css 通常同时写入成功)。最常见原因是宿主 schema 比客户端旧,即安装了新版本但未重启 DSH:客户端已写入新字段(例如锚点类型 group),运行中的宿主仍按旧 schema 校验,从而拒绝整个 canvas 字段。两种处理方式: ① 重启 DSH 后刷新页面(重启会结束当前会话);② 先不改该设置,把相关图片的锚点从「整组」改回「元素」再保存。
若画布数据确实很大(面板会显示约多少 KB),则属于体积问题,改用更小的图片。
Q:装了新版本需要重启 DSH 吗?
宿主半区(lib/index.js,负责 schema 与设置落盘)的变更需要重启;客户端半区(lib/client.js)在本机为热更新,刷新页面即可。因此:只改样式、预设与绘制模式的版本只需刷新页面;改动字段 schema 的版本需要重启 DSH。
Q:预设主题会不会让文字看不清?
不会。三套预设的文字档位都按其实际所在背景计算过对比度:正文与次级 ≥ 4.5:1(WCAG AA)、三级 ≥ 3:1、 caption ≥ 2.6、dimmed ≥ 2.2;主按钮与对比按钮的文字同其填充色 ≥ 4.5;品牌色在主背景上 ≥ 3。
这些底线由 tests/preset-contrast.test.mjs 校验。三套预设均跟随应用的明暗模式,各自配色完整。
回到原生外观可使用「默认」或关闭「启用皮肤」。旧版内置的「极夜」(强制两种模式都为深色)已移除,但使用它的令牌保存过的皮肤照常生效(文档保存的是令牌值,界面显示为「自定义皮肤」)。
Q:点了「本机字体」弹出授权或列表很短?
Chromium 内核使用 Local Font Access API 枚举本机字体,首次需要授权;拒绝授权或浏览器不支持该接口时,自动退化为候选字体探测,列表顶部会标明来源。授权可在浏览器的网站设置中修改,刷新页面后重新点击按钮即可。
Q:改了没效果?
确认「启用皮肤」已打开;确认当前 profile(Web 中修改的内容不会出现在 Desktop);可先在绘制模式里确认改动本身有效。
若改的是背景图或背景类令牌,确认「兼容模式」没开——开了它就不接管背景。
Q:绘制模式里设置弹窗位置异常?
绘制模式下真实页面会内缩,设置弹窗遵守同一条内缩规则,因此它居中于应用区域内,而不是被工具条或面板遮挡。
Q:某个插件的面板被绘制模式挡住,无法操作?
点击工具条的「⇤ 面板靠左」或「⇥ 面板靠右」:页面内缩与面板一起换边,被压住的组件随即可见。
被压住时工具条第二行会显示被遮挡的元素名,该行本身即换边按钮。
Q:如何恢复原生外观?
「皮肤管理 → 还原默认」清空整套皮肤并停用,或关闭「启用皮肤」。两者都不影响 DSH 自身,也都不动皮肤库里已保存的皮肤。
绘制模式里的「还原默认」做同一件事(写进皮肤文档),只是入口在工具条上。
兼容性
| 项目 | 状态 |
| DSH 0.2.0-rc.2 | 已适配 |
| DSH 0.2.0-rc.1 | 已适配 |
| DSH 0.1.7-rc.2 | 已适配 |
| 平台 | DSH Web 与 DSH Desktop(Windows / macOS / Linux 的桌面壳同理) |
| DSH < 0.1.7 | 不支持(0.1.7 起才有本包使用的 Config 与 profile bundle 形态) |
已声明兼容适配:dsh-wallpaper-engine
本项目声明并实测兼容 elysia395/dsh-wallpaper-engine(下称"壁纸引擎",对照 1.3.0-r2):
- 装了就不再抢背景:检测到它就自动进入兼容模式(读它常挂的 data-we-glass-page / data-we-adapter / data-we-wallpaper),不画自己的壁纸与背景类令牌,把背景整块留给它;点一下开关即明确关闭,且这个决定盖过自动检测。
- 不要求它让路:兼容模式下不发布 html[data-dsh-skin],它的壁纸、玻璃、轮播一概不动。
- 反向也读:非兼容模式下若它的壁纸在台(body[data-we-wallpaper]),本插件不画第二个壁纸,等它让出画布再画。
- 各管各的:它管毛玻璃与背景,本插件管配色、字体、边框、圆角、规则、文字与图层;两者同时开着也能用。
与其他插件共存
两个插件都要画同一片像素时,靠 DOM 标记约定,谁也不 import 谁(对方可能没装、版本更旧或更新)。
壁纸插件 dsh-plugin-wallpaper-engine(1.3.0-r2 起):该插件的客户端观察 documentElement 上的
html[data-dsh-skin],看到标记就让路——清掉自己的壁纸层、把玻璃整族摘掉,并把用户选的壁纸记下来,
等标记消失后放回(它有 450ms 进场、2.6s 复位两道滞回)。本插件的行为:
- 皮肤在台上时挂上 html[data-dsh-skin="dsh-myskin"],停用 / 还原 / 卸载时摘掉;另一个皮肤插件写的同名标记只读不写,绝不覆盖或删除。
- 对方壁纸在台(body[data-we-wallpaper])时,本插件不画自己的画布壁纸与那一层表面透明,其余令牌 / 规则 / 文字 / 图层照常生效;标记一变就重新评估,对方让出画布后壁纸自动回来。
- 因此实际效果是:应用皮肤时壁纸让位(并在皮肤停用后自动放回);在壁纸插件里手动挑一张壁纸时壁纸优先。
- 不想让位就用兼容模式(「皮肤管理」里那个开关):它不发布 html[data-dsh-skin],因此对方的壁纸、玻璃一概不动,本插件也不画背景与背景类令牌,两边各管各的。这是那条自动互操作的手动退出。
代价与边界:绘制模式的实时预览层按草稿作画,不跟随这条让位规则;皮肤在台期间壁纸插件不显示壁纸,这是对方设计好的语义(它保留了用户的选择,不会丢)。
以上两条由 tests/interop.test.mjs 钉住。
许可
MIT © WTStarMark · 仓库:<https://github.com/WTStarMark/dsh-myskin>预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
WTStarMark/dsh-myskin
DSH 通用皮肤框架:可视化自定义 + 实时预览 +…
相关插件 · 市场 / 管理
插件精选列表awesome-dsh-plugin/awesome-dsh-plugin
DeepSeek Harness(dsh)插件精选列表
★ 22,225未汉化DSH
73.6
新词雷达zhuyansen/new-term-radar
new-term-radar新词雷达
★ 2,049已汉化MCP
72.8
插件生态导航0xsline/awesome-deepseek-harness
安装 贡献指南 DeepSeek Docs 公开插件目录 Issues
★ 1,188已汉化DSH
72.6
技能注册中心iflytek/skillhub
企业级开源智能体技能注册中心——发布、发现并管理组织内可复用的技能包。
★ 5,370已汉化DSH
71.9
插件市场目录imsai-sh/awesome-deepseek-harness-plugins
面向 DeepSeek Harnessdsh生态的社区插件目录,共收录 13941 个插件含 PR 收录与…
★ 355已汉化DSH
71.8
插件精选清单Anil-matcha/awesome-dsh-plugin
DeepSeek Harnessdsh精选指南——DeepSeek…
★ 1,013已汉化DSH
71.7
这是你的仓库?认领条目