dsh-cyrene-theme
把 DSH Web GUI 换成昔涟(《崩坏:星穹铁道》)的粉白渐变毛玻璃主题,附带侧边栏可编辑的人格设定、昔涟表情包、新会话欢迎页形象,以及可开关 / 选图 / 轮换 / 调淡的整页背景图。非官方非商业同人作品;昔涟及相关美术素材版权归米哈游(miHoYo / HoYoverse)所有,与官方无隶属或背书关系。
安装
dsh plugin --profile web add dsh-cyrene-theme
沙箱测试结果
| 阶段 | 结果 |
|---|---|
| 1 安装 | ✓ |
| 2 列装 | ✓ |
| 3 挂载 | ✓ |
| 4 启动 | — |
四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。
README
dsh-cyrene-theme · 昔涟主题



把 DSH Web GUI 换成《崩坏:星穹铁道》昔涟(Cyrene)的粉白渐变毛玻璃主题,把 agent 的人格设定改成昔涟——人格提示词可以直接在侧边栏里改——让她在该有情绪的时候贴一张自己的表情包,把新会话欢迎页的鱼换成她、顺手把输入框的默认提示换成她的话,还能把整页背景换成 Background/ 里放的那几张图(可以在面板里开关、选起点、自动轮换,也能自己上传新的;深色模式下还能自动换成指定的那一张)。
English — A pink-and-white frosted-glass skin for the DSH Web GUI, themed after Cyrene from Honkai: Star Rail. It also rewrites the agent persona (editable from the sidebar), teaches the agent to post Cyrene reaction stickers, replaces the new-session hero fish with her, and adds a full-page background manager (enable / pick / rotate / fade the images in Background/, upload your own, and bind one image to dark mode).
Install:dsh plugin --profile web add dsh-cyrene-theme(npm, pinned version) or… add github:berhbro/dsh-cyrene-theme(tracks the latest commit) — then reload the page. UI text is Chinese.
Unofficial fan project. Cyrene and all Honkai: Star Rail character art, names and assets are © miHoYo / HoYoverse, used here as non-commercial fan work. Not affiliated with or endorsed by miHoYo, HoYoverse or DeepSeek — see 「版权与致谢」 below.
能力
部分 · 实现
主题 UI · 客户端半注入一份作用域化样式表(body[data-dsh-cyrene][data-cyrene-skin="on"]):整体渐变背景、半透明表面 token、backdrop-filter 毛玻璃、粉色描边与柔和阴影、粉色滚动条/选区。全部随插件卸载自动还原。--dsw-alias-bg-base 被设成 transparent,所以渐变由 body::before 铺满视口;桌面版窗口带原生材质(backgroundMaterial: "acrylic"),因此 html 画布上也补了一层不透明底色,避免整窗透出系统模糊。
人格设定 · 宿主半注册 systemPrompt.section({ name: 'cyrene:persona', order: 部署人格前缀 order + 100 })——运行版 dsh-system-prompt 的键是 DEPLOYMENT_PERSONA_PREFIX(0),旧版是 DEPLOYMENT_PERSONA(0),两个都试;都取不到就落到 100,仍然排在通用人格之后、工具策略 PLAN_POLICY(500) 之前。每次保存后重挂这个 section,所以改完立刻对之后每一轮对话(含新对话)生效,不需要重载插件。section 名用本包自己的 cyrene:persona,绝不占用保留名 deployment:persona(那是 @deepseek-ai/dsh-persona 的位置,全局重名注册会直接失败)。
侧边栏编辑 · 客户端半向 sidebar.footer.action 注册「✦ 昔涟」按钮(点开浮动面板),并额外向 settings.section 注册一整页「昔涟 · 主题」,两处用的是同一个编辑器。
表情包 · 素材放在包内 meme/ 下(文件名就是表情名字),stickers.json 是清单(id / 名称 / 什么时候用 / 文件)。宿主半把清单折算成一段附在人格之后的「【表情包】」说明——每张图的绝对路径整行写好,模型直接照抄(路径里带括号、空格或非 ASCII 时,自己拼很容易抄错)——并开两条只读路由:GET /cyrene/stickers(清单,支持 ?reload=1)与 GET /cyrene/sticker/<id>(图片字节,带 ETag/304)。设置页里能看到缩略图与「允许发表情包」开关;关掉后这段说明就从系统提示词里消失。
表情包管理 · 面板里只有一行入口(「✦ 表情包管理 N 张」+「打开管理器」),点开是一整页管理器(挂在 body 上的覆盖层,Escape 或右上「关闭」退出):里面加图(选文件 → 转成 data URL → POST /cyrene/stickers)、删图(只删自己加的,POST /cyrene/stickers/remove)、调大小(48–240px 滑杆,落进 state.stickerSize)。页面本身封顶 + 内层滚动,素材不会撑出管理器范围。自添加的图落在 stickers-custom/(gitignore,属运行时数据),条目存在状态文件的 customStickers 里,与包内清单合并成同一份「【表情包】」说明——加完立刻能贴,不用重载插件行。
背景图 · 两处素材来源:随包的 Background/(自己丢图进去)和面板里上传的 backgrounds-custom/。宿主半扫描两边(GET /cyrene/backgrounds,支持 ?reload=1)、按文件名把字节发出去(GET /cyrene/background/<文件名>,与表情包同一套响应头),并开 POST /cyrene/backgrounds(上传)、POST /cyrene/backgrounds/remove(只删自传的)。客户端半在 body 上挂一层 .cyre-bg(position:fixed;inset:0;z-index:-1;pointer-events:none):两层图交叉淡入 + 一层色纱,有图时铺满视口;整列对话区不刷白,照片直接透上来,只把用户气泡的底色调厚、再给正文一圈淡光晕。控制板里只留一行入口(「✦ 背景图管理 N 张」+「打开管理器」);管理器是一整页覆盖层:顶部的外观两档「浅色 / 深色」(调宿主自己的主题服务,整个应用跟着换)、「背景图 / 简约(无图)」二选一、上传、点缩略图选起点、开自动轮换(15–3600 秒)、拖浓度(0.2–0.85)、删掉自传的图。详见「背景图」。
长期记忆 · 记忆存在自己的文件里($DSH_HOME/cyrene-memory.json,和设定分开——它会长大,而设定必须保持小且可重置),宿主半开四条路由:GET /cyrene/memory(清单 + 记忆自己的 rev)、POST /cyrene/memory(add / remove / clear / toggle,同样带 rev 的乐观并发,缺 rev → 400、过期 → 409)、GET /cyrene/memory/raw(text/plain 原文,浏览器里直接看得到)、POST /cyrene/memory/reveal(让宿主在系统文件管理器里定位那个 JSON)。另注册三个工具给模型:cyrene_memory_add、cyrene_memory_search、cyrene_memory_forget;记忆正文以独立 section(cyrene:memory,排在人格之后 20)注入系统提示词,有 2600 字预算、按时间倒序,超出预算的老条目不再进提示词(但留在文件里、搜索照样找得到)。控制板里只留一行入口(「✦ 长期记忆 N 条」+「打开管理器」),管理器是一整页覆盖层:启用开关、搜索、手动加一条、删单条、清空。宿主没有 tools 服务时工具整块安静跳过,注入与面板照常。
世界书 · 世界设定库(翁法罗斯的角色档案 / 故事 / 关系 / 解析)单独存在 $DSH_HOME/cyrene-worldbook.json,随包的 tools/build-worldbook.mjs 能从官方 wiki 接口一键抓取并转换(默认写到同一个位置)。宿主半只往系统提示词里注入一行索引(700 字内:库里有哪几位角色、该用哪个工具查),正文由 cyrene_worldbook_search 按关键词取回;面板里只有「多大 / 什么时候抓的 / 文件在哪」三个动作:抓取 / 更新、打开文件位置、清空——抓到的条目不铺在管理器里。
持久化 · 宿主半自带 fenced 路由 /cyrene/state(GET 读 / POST 写),落盘到 $DSH_HOME/cyrene-theme.json(默认 ~/.dsh/cyrene-theme.json)。写入走乐观并发:写请求必须带上 GET 拿到的 rev,缺 rev(旧版客户端半 / 手搓脚本)→ 400 client-outdated,rev 过期 → 409 stale —— 没刷新的旧页面不可能再把别处的改动盖回去。
对话界面 · 新会话欢迎页:客户端半占用 conversation.hero.brand.mark 这个单占位槽(官方 brand 包不占它,默认渲染才是那个动态鱼;DSH Desktop 的桌面模块在 p0 占着同一个槽,所以本包用 priority:-1 盖住),改成昔涟的整张贴纸(带 alpha 的 Q 版立绘,不画边框底盘)+ 一句粉白渐变艺术字欢迎语,整行是纯装饰(点不响、选不中、拖不动);贴纸字节走宿主半的 GET /cyrene/hero,图片路径来自 state.hero.image。输入框占位提示:原生那句写在 [data-composer-placeholder] 的文本节点里、没有 i18n 覆盖的口子,所以用纯 CSS(把原字染透明 + 自己的 ::after 写一句「有问题?有任务?来找昔涟♪」)替换,不动 DOM、不碰宿主词典。悬浮毛玻璃:输入框卡片的 backdrop-filter 画在 ::before 上而不是卡片本身,否则会破坏发送键那个未开 portal 的 fixed Tooltip 的定位、鼠标停上去时界面闪烁(详见「已知坑」)。详见「对话界面微调」。
安装
从本地目录(开发时就地改):
dsh plugin --profile desktop add D:\dshWorkPlace\dsh-cyrene-theme
从 npm(发布版,版本号固定;--profile 换成你自己的 profile 名,Web 端一般是 web,桌面端是 desktop):
dsh plugin --profile desktop add dsh-cyrene-theme
从 GitHub(跟随 main 的最新提交,能拿到还没发版的改动):
dsh plugin --profile desktop add github:berhbro/dsh-cyrene-theme
装完刷新一次页面:客户端半的 bundle 是页面加载时读的,不刷新还是旧的。(files 里已包含 Background/、meme/、stickers.json,所以从 GitHub 装也带素材。)
卸载:dsh plugin --profile desktop remove dsh-cyrene-theme。
截图
深色主题(night-reading.jpeg)与新会话欢迎页:
…(truncated)
以上内容来自 npm 上的 README,我们只做格式化,不改内容。
版本
npm 上共发布:4,最后更新 2026-11-01