dsh-skin-xuyuanwu 🏮
许愿屋主题皮肤插件 for DeepSeek Harness(DSH)。
深夜里,一间永远亮着暖灯的小屋。你对屋里的 AI 许愿,灯就会亮起、
星就会回应 —— 有求必应。
自绘原创 SVG(月洞窗夜景:新月、星群、暖橘小屋、琥珀窗灯、檐下灯笼、
「有求必应」木牌),通过官方皮肤扩展点覆盖 Web 客户端外观,
卸载即 100% 还原官方外观,零残留。
本地对照检查造型:node scripts/preview.mjs 生成 assets/preview.html
(含暖纸/靛夜两套主题底色模拟与色板)。
效果
| 视觉面 | 变化 |
|---|
| 侧栏 logo | 官方鲸鱼 → 许愿屋小屋(暖橘屋顶 + 亮着的琥珀窗 + 许愿星) |
| 侧栏品牌名 | DeepSeek Harness 字标 → 「许愿屋 ✦ 有求必应」 |
| 首屏徽章 | 动画鲸鱼 → 月洞窗夜景徽章(漂浮 + 星光闪烁 + 窗灯呼吸 + 灯笼摇曳) |
| 首屏大标题 | 「探索未至之境」→「请许下你的愿望」(楷体许愿签手写感 + 琥珀渐变文字 + 柔光辉晕 + 入场「逐字点亮」wipe(clip-path 从左向右揭开,像一笔一笔写下愿望)+ 流光扫过:4.6s 周期、近白金亮带从左掠到右并伴随辉光脉冲,可配置、可关闭) |
| 全局主色 | 蓝 → 灯火琥珀(按钮/链接/焦点/选中态,亮暗自适应) |
| 背景 | 亮色「暖纸」奶油纸色 / 暗色「靛夜」缀星靛蓝(全套语义令牌) |
| 滚动条 / 气泡 / 侧栏 | 暖金 / 杏仁气泡 / 暖纸·靛夜侧栏填充 |
| 全局背景 | 纯色 → 许愿星空氛围贴片 + 顶部灯晕纵深(480px 平铺:亮=暖墨星辰、暗=暖金星辰,低透明度,弹层保持干净) |
| 背景月 | 右上一轮按今日真实农历月相绘制的月(朔望月公式:新月细成一线、满月滚圆、上弦右亮、下弦左亮;亮度随圆缺;刷新即更新);月相呼吸:今日月每约 96s 缓缓盈到满月、再缓缓亏回今日月相(余弦节奏两端自然驻留,盈的方向顺着今日盈亏侧——月亮是活的);月亮轨迹:月相画布沿上空规律摆动(水平 ±100px + 轻上下 18px,约 180s 一轮,正弦两端驻留;点月亮彩蛋的命中/光环/柔光跟着月亮走) |
| 背景动效 | 星空缓漂(480px/480s 无缝循环)+ 双流星错峰划过(13s/19s 周期,一右下一左下、朝向严格对齐;3px 光带 + 10px 辉光,第二颗换色:亮=琥珀橙、暗=星银)+ 随机天降流星(JS 生成,起点/朝向/长度/时长/配色全随机,12-30s 一颗) |
| 闪烁星群 | 近景随机撒星(远景组小而密 + 近景组大而亮,各自随机周期闪烁)+ 鼠标视差(远近两组反向微移、近组位移约两倍,星空有纵深) |
| 鼠标拖尾 | 移动落许愿星(≥28px 一颗、飘散消逝、双色随机、池上限 24,reduced-motion 自动关闭) |
| 回车许愿流星 | 输入框里敲下回车(许愿!)即有一颗流星划过——「有求必应」的具象化(170×3px 光带 + 辉光 + 每颗随机配色:亮=暖墨金/琥珀橙/暖银棕、暗=暖金/星银/暖橙/冰蓝星辉;输入法组词/Shift+Enter 不误触;1.8s 冷却 + 同时最多 2 颗) |
| UI 细节与信笺墨金 | 选区高亮(选中文字铺暖金)+ 表单点缀色(checkbox/radio/range/progress 灯火琥珀)+ 滚动条(细圆暖金条、悬停增亮)+ 输入聚焦星环(textarea/文本输入聚焦泛暖光)+ 按钮手感(悬浮微抬 1px + 暖影、按压回落)+ 信笺墨金质感(代码块暖金微光边框、引用块琥珀手札竖线、思考折叠区温润微光;全部走通用选择器) |
| 挑灯织光态 | AI 思考与流式生成时,小屋窗灯进入快频明亮呼吸与灯笼微摆共鸣;生成完毕轻弹散开一颗小星芒达成愿望(MutationObserver 智能感知) |
| 字落生辉 | 输入框敲击打字时冒出微小金色萤火微尘,向上飘散 450ms 淡出(90ms 节流 + 12 颗上限,组词与 reduced-motion 不误触) |
| 纯原生空灵音效 | Web Audio API 纯程序合成零外部资源:点月亮轻扬水晶风铃音(E6/G6/B6/E7 空灵五度)、回车流星微风掠鸣,开箱即听 |
| 现实时辰昼夜联动 | 深夜(23-05 点)窗灯辉光自动增强 15%、灯笼光晕更温存;傍晚薄暮(17-19 点)夜空叠染薄霞光晕 |
| 小屋彩蛋每日许愿签 | 点击「有求必应」木牌或双击首屏徽章,弹出手作宣纸签语 Toast(内置 16 条治愈古风诗句,3.8s 自动淡出或点击收起) |
| 掌中微光快捷手札 | 侧栏字标星标或三击月亮即可唤出设置抽屉面板,8 项核心视觉与动效开关随心勾选,实时同步持久化至 localStorage |
| 智能低电量节能 | Battery API 感知未插电且电量 ≤25% 时自动降频,精简动画负荷,随手环保节电 |
| 点击星芒 / 按钮碰星 | 任何点击在指针处炸开一颗四角星(放大旋转消散);划过按钮(含 role=button)在指针旁碰出小星(同一按钮 600ms 内不重复);事件委托定位,池上限 + 节流防刷屏 |
| 启动开幕动画 | 约 1.3s「揭幕仪式」:暖纸/靛夜幕布上小屋徽记回弹浮现 →「许愿屋」楷体字标上浮 +「有求必应 · 请许下你的愿望」副标 → 三颗星错峰闪现 + 一道流星划过 → 幕布淡出,首屏徽章浮现、标题逐字点亮接棒登场(每页面会话一次,HMR 不重演;pointer-events none 零交互,reduced-motion 跳过) |
| 点月亮许愿 | 右上今日月可点击(悬停浮现光环;零占位命中测试:页面上不叠任何可交互元素,绝不遮挡/吞掉任何按钮,点到真实控件一律让路):点一下月心爆柔光 + 落一场流星雨(5 颗错峰、随机配色;2.5s 冷却)——「有求必应」的隐藏彩蛋 |
| 可触摸的徽记 | 悬停侧栏小屋 logo / 首屏月洞窗徽章:辉光增强、许愿窗点亮(琥珀窗变亮金)、灯笼与许愿星更亮——徽记是活的,摸得到回应 |
主题令牌层覆盖品牌主色、背景层级、文字标签、描边、交互态、按钮、
Markdown、滚动条与具体组件面(气泡/输入/菜单/侧栏),全部带
{ light, dark } 双值随官方亮暗模式自动切换;语义状态色(成功/错误/警告)
沿用官方,保证语义不被皮肤吞掉。
安装(本地目录)
dsh plugin --profile desktop add D:\workProject\dsh-skin-xuyuanwu
# 或装进 web profile:
dsh plugin --profile web add D:\workProject\dsh-skin-xuyuanwu
安装后重启 DSH Desktop(新增 bundle 需要重载 profile;之后改
cordis.patch.yml 或热重载不需要重启)。
卸载 / 开关
- 完整卸载:
dsh plugin --profile desktop remove dsh-skin-xuyuanwu
- 临时关闭某层:改
cordis.patch.yml 里对应开关(brand / theme /
heroAnimation / background / bgAnimation / bgMoon / starTrail /
starField / wishMeteor / uiPolish / clickStar / bootAnimation /
moonWish / heroStyle / heroHeadline 置空),保存即热生效
- 整体禁用:Desktop 的插件管理页禁用本插件,或 profile 的
cordis.patch.yml 里写 - id: skin-xuyuanwu + disabled: true
多皮肤叠加
ctx.theme.overrideTokens 的多个来源会叠加(后者胜出)。与其他
换肤插件(如 dsh-qq-skin、dsh-theme-cyberpunk2077、dsh-skin-ggbond)
同时启用时会互相覆盖成混合泥。切换皮肤时请在 profile 的
cordis.patch.yml 里用 disabled: true 关掉其他皮肤,一次只留一个。
工作原理
双半结构(DSH 插件标准形态):
package.json dsh.bundle.patch + dsh.client(platform: web) 双声明
cordis.patch.yml 配置树挂载行(含十七个开关 + 标题文案)
lib/index.js node 半部:空 Loader 座位(无宿主侧行为)
lib/client.js 浏览器半部:ModuleLoader bundle(真正干活)
浏览器半部二十一层实现(按 apply 顺序):
- 主题令牌层 —
ctx.theme.overrideTokens(source, tokens):约 90 个
语义令牌的 { light, dark } 双值覆盖(品牌/背景/文字/描边/交互/按钮/
Markdown/滚动条/具体组件面 + deepseek→琥珀阶、blue→靛夜阶两组静态
色阶),自动跟随亮暗模式,返回 remove 函数。
- 布局 CSS 层 —
<style data-plugin-css="dsh-skin-xuyuanwu/layout">
按开关拼装注入:首屏徽章动画(漂浮/星光/呼吸/摇曳)、背景与月相与
流星动效、标题场景化、拖尾星样式、闪烁星群样式、许愿流星样式、
UI 细节打磨、点击星芒样式、开幕动画、点月亮样式,全部尊重
prefers-reduced-motion。首屏徽章/侧栏 logo 悬停点灯(窗灯/灯笼/
许愿星更亮 + 辉光增强)。
- 启动开幕动画层(
bootAnimation)— 约 1.3s「揭幕仪式」:暖纸/
靛夜幕布上小屋徽记回弹浮现(0.06s)→「许愿屋」楷体字标上浮
(0.34s)+ 副标「有求必应 · 请许下你的愿望」(0.5s)→ 三颗星错峰
闪现(0.28-0.52s)+ 一道流星划过(0.58s)→ 幕布淡出(0.98s)。
幕布在场期间 body 挂 xyw-booting 协调类:首屏徽章推迟到揭幕时
浮现(只动 opacity 避开漂浮动画的 transform)、标题 wipe 推迟到
1.12s;2.35s 摘类(入场已完成,float 按动画名保留不重启、shimmer
时延不动,无相位跳变)。每页面会话只演一次(HMR 重放不重演);
pointer-events: none 零交互、淡出 forwards 收在 opacity 0(即使
移除失败也不可见)+ animationend 自移除 + 2.6s 超时兜底;
reduced-motion 整层跳过。
- 全局背景层 — 固定全窗的许愿星空贴片(自绘 SVG data URI,
480px 无缝平铺)+ 顶部灯晕 radial-gradient(暖光纵深)+ 今日月相月
(
bgMoon;moonCycle 开时静态月让位给月相呼吸层):亮色「暖纸 ·
暖墨星辰」、暗色「靛夜 · 暖金星辰」,经官方
主题引导写入的 body[data-ds-dark-theme] 属性自动切换。月相由朔望月
公式(2000-01-06 新月纪元 + 29.53 天周期)算出,双弧构造绘制亮面
(盈月亮右、亏月亮左),新月缩成一线仍有极淡轮廓;亮度随今日照亮
比例缩放(月随圆缺明暗)。背景动效(bgAnimation):贴片层以
480px/480s 缓漂(无缝循环,灯晕/月相层坐标钉死)+ 两条流星错峰划过
(划动向量与流星朝向严格对齐)。元素挂在 body 尾部、
pointer-events: none 零交互,z-index: 0 让模态/下拉/浮层(均带
更高 z-index)保持干净;卸载即移除元素。
- 月相呼吸层(
moonCycle,需 background + bgMoon)— 今日月
是活的:相位以余弦节奏在「今日真实月相 ↔ 满月」之间往返
(w = (1-cos(2πt/T))/2,两端导数为零——在今日月相与满月处自然
驻留;盈的方向顺着今日的盈亏侧,盈月从右侧长满、亏月从左侧长满,
回到满月都是「变满」),约 96s 一轮(48s 盈 + 48s 亏)。实现为
今日月专属画布(moonCycle 开时背景层不再叠静态月,由本层 120ms
一拍重绘 data URI;位置与原 background-position 86% 9% / 220px
数学上严格一致,点月亮彩蛋坐标照旧对齐);照亮比例随相位实时变化
(月随圆缺明暗),亮暗配色每拍读取 body 属性(切主题 ≤120ms 内
换月色);页面隐藏时跳过重绘、URL 未变不写样式(reduced-motion
驻留今日月相时零抖动)。moonOrbit 开时叠加月亮轨迹:正弦摆动(水平 ±100px + 轻上下 18px,180s 一轮,两端驻留),每拍把偏移写进共享 XYW_MOON_POS——点月亮彩蛋的命中圆/光环/柔光读它跟随,月亮走到哪、彩蛋跟到哪;reduced-motion 位置也驻留原位。
- 近景闪烁星群层(
starField)— 随机撒 13-17 颗小星(四角星/圆点
两种,远景组 8-10 颗小而密、近景组 5-7 颗大而亮),各自以随机周期/
相位闪烁(透明度 + 微缩放;动画名 xyw-field-twinkle 避开首屏徽章
的 xyw-twinkle);两组随鼠标反向微移视差(近组位移约为远组
两倍,CSS transition 平滑跟随)营造纵深。reduced-motion 整层隐藏。
- 鼠标许愿星拖尾层 —
mousemove 被动监听按移动距离节流
(≥28px 落一颗小四角许愿星,随机 7-13px),CSS 动画上浮旋转飘散
0.72s 消逝、animationend 自移除;双色随机(30% 深琥珀/淡金 alt);
池上限 24 颗防滥用;prefers-reduced-motion 时整层退化关闭。
所有副作用走 ctx.effect,插件卸载/热重载时逆序清理。
配置(cordis.patch.yml)
| 字段 | 默认 | 说明 |
|---|
brand | true | 品牌槽位(logo/字标/首屏徽章) |
theme | true | 灯火琥珀主题令牌(主色/背景/文字/滚动条全套) |
heroAnimation | true | 首屏动画(漂浮/星光/窗灯/灯笼) |
background | true | 全局背景氛围层(星空贴片 + 灯晕,亮暗两版) |
bgAnimation | true | 背景动效:星空缓漂 + 流星(需 background 开) |
bgMoon | true | 今日月相月(朔望月公式,亮度随圆缺,随刷新更新;需 background 开) |
moonCycle | true | 月相呼吸(今日月每约 96s 缓缓盈到满月再亏回;需 background + bgMoon 开) |
moonOrbit | true | 月亮轨迹(月相画布沿上空规律摆动,约 180s 一轮;需 bgMoon + moonCycle 开) |
starTrail | true | 鼠标许愿星拖尾(移动落星、飘散消逝、双色随机、池上限) |
starField | true | 近景闪烁星群 + 鼠标视差(随机撒星、远近两组纵深微移) |
wishMeteor | true | 回车许愿流星(输入框裸回车触发;组词/Shift 不误触;冷却 + 池上限) |
uiPolish | true | UI 细节与信笺质感(选区高亮/表单点缀色/滚动条/输入聚焦星环/按钮手感/代码块边框/引用手札/思考折叠微光) |
weavingLight | true | 挑灯织光(AI 思考与流式生成时窗灯快频明亮呼吸,结束弹散达成星芒) |
typingSparks | true | 字落生辉(输入框打字金色萤火微尘,向上飘散) |
sound | true | 纯原生空灵合成音效(Web Audio 算法水晶风铃与微风掠鸣,零外部依赖) |
timeAmbience | true | 现实时辰昼夜联动(深夜 23-05 点增强辉光,薄暮 17-19 点暖霞光晕) |
wishFortune | true | 小屋彩蛋每日许愿签(点击木牌或双击徽章弹出手作宣纸诗词 Toast) |
quickPanel |
迭代开发
本机以 dsh plugin --profile desktop add <本地目录> 安装时 pnpm 建立的是
链接(link:D:/workProject/dsh-skin-xuyuanwu):改 lib/client.js
后无需重装,浏览器刷新(F5)即生效。若你的安装是快照形态(依赖列表
显示具体版本号而非 link:),改码后需重新安装:
dsh plugin --profile desktop update dsh-skin-xuyuanwu
改 cordis.patch.yml 保存即热生效,无需重装。
无浏览器的结构校验:node test/smoke.mjs(31 组断言)。
License
MIT