Skip to content

Releases

v1.0.4 — 修掉 DSH 桌面端的整树崩溃 / fix: single-slot crash on DSH Desktop

Choose a tag to compare

@Theflowyears Theflowyears released this 02 Nov 11:00

明日方舟主题美化包 · Arknights Theme Pack — v1.0.4

为《明日方舟》玩家在 DeepSeek Harness Web 上构建沉浸感的主题包。
Building immersion for Arknights players on the DeepSeek Harness Web GUI.

1.0.3 在 DSH 桌面端会把整棵前端插件树带崩、直接进安全模式。这一版修的就是它。
1.0.3 could take the whole client plugin tree down on DSH Desktop — recovery page, then safe
mode with every third-party client plugin disabled. This release fixes that.

安装 / Install

dsh plugin add https://github.com/Theflowyears/dsh-arknights-theme/releases/download/v1.0.4/dsh-arknights-theme-1.0.4.tgz

或 npm / or npm:

dsh plugin add dsh-arknights-theme
dsh plugin add Theflowyears/dsh-arknights-theme

装完重启 dsh web(桌面端则重启应用)再刷新。Restart the host, then reload.

1.0.4 修了什么 / What changed in 1.0.4

1. 三个 brand 单槽没有写 priority(致命,来自 issue #2)

sidebar.brand.mark、sidebar.brand.name、conversation.hero.brand.mark 在宿主的 SlotMap 里
是 kind: "single" —— 一个位子只坐一个人,想顶掉随宿主发布的那位,必须用更低的 priority
(宿主的原话是 "lowest renders"),而不是和它挤同一个优先级。

1.0.3 这三处都没有写 priority,于是和宿主已有 occupant 撞在 0 上:register() 当场抛错 →
本插件 apply 失败 → 整棵客户端插件树一起加载失败 → 桌面端进恢复流程、随后安全模式
(所有第三方前端插件被屏蔽)。报告里两次复现,第二次直接把插件从 profile 移除。

现在这三处显式声明 priority: -1:顶掉宿主占位而不是和它抢。在会自己给单槽分配优先级的宿主上
这个值会被覆盖,属于无害;在会采纳它的宿主上,这就是「覆盖」与「崩溃」的差别。

The three brand seats are single slots in the host's SlotMap: one occupant each, and replacing the
shipped one is done by registering at a lower priority ("lowest renders"). 1.0.3 registered them
at the default 0 next to a host already at 0, so register() threw inside apply — which fails the
plugin and, with it, the entire client plugin tree. They now claim the seats at -1.

2. 工具数据栏的属性被宿主改名(顺带修的)

宿主 0.2.1 把容器上的 data-composer-stats 换成了每个 anchor 上的
data-composer-stat="activity" | "usage"。旧规则因此整条不匹配,谢拉格/乌萨斯两颗徽记会再次静默消失。
现在两种形态都匹配,并且新形态直接用宿主的语义标签定位,不再靠兄弟次序猜哪个是哪个。

Host 0.2.1 replaced the container's data-composer-stats with a per-anchor
data-composer-stat="activity" | "usage". Both shapes are matched now, and the labelled shape is
targeted by that label instead of by sibling position.

3. 两道闸门 / two gates

  • check-slots.mjs(新增,已进 rebuild-all.mjs):四个 list 槽必须有 id,三个 single 槽必须
    带负数 priority,且不允许留下没写 priority 的同一槽注册。
  • check-anchors.mjs 现在认识宿主的改名:data-composer-stats ↔ data-composer-stat 互为别名,
    报告为 ok*,不再是误报 GONE。

4. 工具链不再写死环境

验收脚本原来硬编码 GUI 端口 3080 与样式表绝对路径。桌面端是 3000、目录也搬过家,于是
fix-pass40 在无宿主时直接抛 fetch failed、check-anchors 报文件不存在。现在端口是探的
(3000 → 3080,都没有就跳过并说明),路径按脚本自身位置解析。

验证 / Verification

结构套件 39/40/41 + CSS 规则 + 锚点与契约 + slot 检查 + 五项声明审计
  ALL GREEN
slot 检查:12/12(三个 single 槽 priority -1;四个 list 槽保留 id)
实时样式表:HTTP 200,235,916 字符

素材 / Assets

代码 MIT;美术素材不是。游戏美术与签名版权归鹰角网络(Hypergryph / Studio Montagne),
每张插画仍归绘制它的画师本人所有,图标取自 PRTS Wiki。素材随包分发,仅供个人在本地使用。
The code is MIT; the artwork is not. Bundled for personal, local use only.

v1.0.3 — 修复全新安装只剩纯色 / fix: a fresh install painted nothing

Choose a tag to compare

@Theflowyears Theflowyears released this 17 Oct 13:08

明日方舟主题美化包 · Arknights Theme Pack — v1.0.3

为《明日方舟》玩家在 DeepSeek Harness Web 上构建沉浸感的主题包。
Building immersion for Arknights players on the DeepSeek Harness Web GUI.

如果你从插件市场装过 1.0.1 / 1.0.2 却发现界面完全没变化(只剩纯色),这一版修的就是它。
If a market install of 1.0.1 / 1.0.2 left the interface unchanged (a flat colour), this is the fix.

这一版的全部内容来自 issue #1
(@sqxhealer-cloud)—— 报告定位得非常准,四处问题逐一核对后全部成立。
Everything in this release comes from issue #1; each of its four findings was checked against the
code and each one held.

安装 / Install

预构建包(本页附件)/ Prebuilt package (the asset below):

dsh plugin add https://github.com/Theflowyears/dsh-arknights-theme/releases/download/v1.0.3/dsh-arknights-theme-1.0.3.tgz

npm / from the repository:

dsh plugin add dsh-arknights-theme
dsh plugin add Theflowyears/dsh-arknights-theme

装完重启 dsh web 再刷新页面。Restart dsh web afterwards, then reload.

1.0.3 修了什么 / What changed in 1.0.3

1. cordis.patch.yml 里还是旧包名(致命)

name: 'dsh-amiya-wallpaper',而 npm 上这个包叫 dsh-arknights-theme。加载器解析这一行失败,
宿主半边从未执行,市场只报一行 1 entry did not activate。
The patch still inserted the loader row by the pre-rename package name, so the import failed and the
host half never ran.

2. lib/client.js 的 loader id 还是旧包名

客户端模块图按 loader 行的 specifier 查 factory,名字对不上就永远查不到 —— 浏览器半边同样不执行,
表现为"换壁纸的按钮不见了"。
The client bundle registered its factory under the old id, so the module graph never resolved it.

3. MIME 表缺 .css

皮肤样式表被以 application/octet-stream 返回,浏览器对 <link rel="stylesheet"> 有 MIME 检查,
会直接丢弃 —— 文件没错、HTTP 200、长度完整,只有 Content-Type 错。
The stylesheet went out as application/octet-stream; browsers drop a stylesheet whose MIME is not
text/css, so the file was fine and completely inert.

我本地一直没发现第 3 点,是因为客户端半边会把同一份 CSS 从 bundle 注入成 <style>,绕过了 MIME;
全新安装没有这层兜底。这也是报告里说"资源 200 但页面纯色"能成立的原因。
Locally the client half masked this by injecting the same CSS as a <style> element; a
from-scratch install has no such fallback.

4. 索引注入改用 DSH 的结构化注入表

原来用 ctx.webServer.tapIndex(...) 往 index.html 塞 <link> 与设属性的脚本。DSH 现在提供
webserver/index-inject 事件 + 结构化行,区别在于行是数据、喂给两个渲染器:服务的 index 与
静态/桌面版的 boot payload 都会应用;而 tapIndex 只对服务端渲染的 index 字符串做变换,
静态部署不走那条路。所以属性读出 null,页面还"恰好"落在主题的兜底纯色上。

现在改为 ctx.on('webserver/index-inject', table => table.push(...)),并在客户端半边再设一次属性
作为最后兜底(幂等,卸载时还原)。
The injection now goes through the structured table, which both the served index and a static
deployment's boot payload apply; the client half also sets the attribute as a last resort.

5. 三道闸门 / three gates, so this class of bug is not silent again

  • 发布前断言发布身份:patch 的 name、client 的 loader id、以及 .css 是否按 text/css 返回 ——
    任一不符,发布直接失败。
  • 构建检查皮肤路由的 Content-Type,不只状态码和长度(宿主半边在进程启动时加载,运行态不一致会
    提示"重启 dsh web 生效")。
  • check-anchors.mjs 继续对照已安装的 DSH 核对选择器锚点与结构契约。

验证 / Verification

构建识别:cordis.patch.yml + client loader id → dsh-arknights-theme
  ok  cordis.patch.yml name is dsh-arknights-theme
  ok  client loader id is dsh-arknights-theme
  ok  no stale package name in cordis.patch.yml
  ok  lib/index.js serves .css as text/css
结构/CSS/锚点/声明审计:ALL GREEN

素材 / Assets

代码 MIT;美术素材不是。游戏美术与签名版权归鹰角网络(Hypergryph / Studio Montagne),
每张插画仍归绘制它的画师本人所有,图标取自 PRTS Wiki。素材随包分发,仅供个人在本地使用。
The code is MIT; the artwork is not. Bundled for personal, local use only.

v1.0.2 — 宿主兼容 / DSH 0.2 compatibility

Choose a tag to compare

@Theflowyears Theflowyears released this 17 Oct 12:38

明日方舟主题美化包 · Arknights Theme Pack — v1.0.2

为《明日方舟》玩家在 DeepSeek Harness Web 上构建沉浸感的主题包。
Building immersion for Arknights players on the DeepSeek Harness Web GUI.

这是宿主兼容版本:DSH 0.2.0-rc.2 改了界面结构,两处装饰因此错位,这一版把它们修好,
并加了自动化检查防止同类问题再静默发生。
This is a host-compatibility release: DSH 0.2.0-rc.2 changed the interface structure and two
decorations landed in the wrong place. Both are fixed, and the build now checks for this class of
breakage instead of discovering it visually.

安装 / Install

预构建包(本页附件)/ Prebuilt package (the asset below):

dsh plugin add https://github.com/Theflowyears/dsh-arknights-theme/releases/download/v1.0.2/dsh-arknights-theme-1.0.2.tgz

npm / from the repository:

dsh plugin add dsh-arknights-theme
dsh plugin add Theflowyears/dsh-arknights-theme

装完重启 dsh web 再刷新页面。Restart dsh web afterwards, then reload.

1.0.2 修了什么 / What changed in 1.0.2

左上角「新会话」的框 / the top-left new-session box

DSH 0.2 把按钮的图标挪进了 newSessionLabelMask > newSessionContent。皮肤原来靠
[class$='_newSession'] > svg 隐藏宿主图标、再用按钮自己的 ::before 画阿米娅徽章——
于是宿主的聊天图标没被藏住,而徽章成了 width:100cqw flex 块的兄弟节点,
把「新会话」整行往右挤,看起来就是错位。

现在:图标隐藏规则同时覆盖两种嵌套;徽章改挂在 newSessionContent 里(0.2)或按钮上(0.1),
两条路径用 :has() 互斥,绝不会画出两个徽章。28px 的尺寸和"标签保留宿主字号"都不变。

In 0.2 the icon moved inside newSessionContent. The skin still hid > svg (which matched
nothing, so the host's chat bubble stayed) and drew the medallion on the button itself, where it
became a sibling of a 100cqw flex block and pushed the row sideways. The icon rule now covers both
nestings, and the medallion rides inside the content row on 0.2 / on the button on 0.1 — mutually
exclusive, so it can never be drawn twice.

最下方缓存命中率之类的工作数据栏 / the stats bar under the composer

DSH 0.2 把这个栏渲染成两种形态:完整统计是 > span.anchor > button.pill,而输入框下方的紧凑栏
是 > span.pill,没有 _anchor 这一层。皮肤的取色规则要求中间的 > _anchor,所以紧凑形态
整条不匹配 —— 谢拉格/乌萨斯两个national徽记从未出现,留着的是宿主自己的 14px 图标。

现在按 pill 本身取址,用兄弟次序定位(first-child:not(:last-child) = 行动、last-child = 消耗),
两种形态都成立,深浅两套配色的墨色也一并覆盖。

0.2 renders this bar in two shapes and the skin's selector demanded the anchored one, so the compact
bar kept the host's own 14px icons and never got the emblems. The rules now address the pill itself
and position by sibling order, which holds in both shapes.

徽记在胶囊里居中 / the crests sit on the pill's centre

验收时剩下的最后一条:两颗徽记看着没居中。原因不是尺寸,而是基线——::before 是行内级盒子,
会继承胶囊 20px 的 line-height,于是它坐在文字基线上,而不是胶囊的光学中心。宿主的 svg 看着居中,
是因为它自带块级行为、盒子也紧凑。

现在 display: block + align-self: center + line-height: 0 三件套把它从基线里拿出来;尺寸同时
从 18px 收到 16px——宿主图标 14px、行盒 20px,16px 才是"上下各留 1px"的最大值。

The last thing found in review was that the two crests did not look centred. The cause was the
baseline, not the size: a pseudo-element is inline-level and inherits the pill's 20px line-height,
so it sat on the text baseline instead of the pill's optical centre. display: block +
align-self: center + line-height: 0 fixes that, and the box is 16px now — the host's icon is
14px inside a 20px line box, so 16px is the largest size that still leaves a pixel of air.

构建里加了一道防线 / a build gate for this class of breakage

新增 check-anchors.mjs,对着已安装的 DSH 逐项核对:

  • 皮肤用到的 39 个类名尾部是否仍然存在
  • 8 个 data-* 属性是否仍然存在(data-amiya-skin 是插件自己的,跳过)
  • 结构契约:宿主若新增了包裹层(如 newSessionContent)或第二种渲染形态(如没有 _anchor 的
    pill),皮肤必须已经知道它,否则构建失败

它接进了 rebuild-all.mjs,所以以后 DSH 升级挪了东西会以构建失败的形式暴露出来,
而不是等下一个人用眼睛发现。

New check-anchors.mjs checks every class tail, data-* attribute and structural contract against
the installed DSH, and runs as part of the build.

验证 / Verification

重建后的完整验收:81 + 41 + 22 项结构检查、CSS 规则检查、锚点与契约检查、五项声明审计,
全部 ALL GREEN。版本 1.0.2。

Full rebuild passed every suite: 81 + 41 + 22 structural checks, the CSS-rule check, the anchor and
contract check, and the five-claim audit.

素材 / Assets

代码 MIT;美术素材不是。游戏美术与签名版权归鹰角网络(Hypergryph / Studio Montagne),
每张插画仍归绘制它的画师本人所有,图标取自 PRTS Wiki。素材随包分发,仅供个人在本地使用。
详见 ARTWORK-ATTRIBUTION.md 与 ICON-ATTRIBUTION.md.
The code is MIT; the artwork is not. Bundled for personal, local use only.

v1.0.1 — 明日方舟主题美化包 / Arknights Theme Pack

Choose a tag to compare

@Theflowyears Theflowyears released this 28 Sep 15:47

明日方舟主题美化包 · Arknights Theme Pack — v1.0.1

为《明日方舟》玩家在 DeepSeek Harness Web 上构建沉浸感的主题包。
Building immersion for Arknights players on the DeepSeek Harness Web GUI.

如果你装过 1.0.0,请更新。 1.0.0 里"玻璃浓度按画面解算"是一条空头承诺:求解器算出了结果,
但样式表读的变量名没人写,那些控件的玻璃一直落在静态回退值上。
If you installed 1.0.0, update. In 1.0.0 the per-picture glass solve was a promise with no
wiring: the solver produced an answer under one custom-property name and the stylesheet read
another, so those surfaces never used it.

安装 / Install

预构建包(本页附件,免构建授权)/ Prebuilt package (the asset below, no build approval):

dsh plugin add https://github.com/Theflowyears/dsh-arknights-theme/releases/download/v1.0.1/dsh-arknights-theme-1.0.1.tgz

从仓库安装 / From the repository:

dsh plugin add Theflowyears/dsh-arknights-theme

装完重启 dsh web 再刷新页面。两种装法都依赖 package.json 里的 dsh.bundle。
Restart dsh web afterwards, then reload. Both routes rely on the dsh.bundle manifest.

1.0.1 改了什么 / What changed in 1.0.1

玻璃真的按画面解算了 / The glass is solved per picture now

亮壁纸得到更厚的霜、暗壁纸得到更薄的板,沉浸度滑杆在档内插值;薄端实测 0.603–0.860(12 个
互不相同的值),每张图内滑杆行程约 0.14。此前它与画面无关,是十二张图共用的一对常数。
A bright wallpaper gets a heavier frost than a dark one and the dial interpolates within that band;
the thin end measures 0.603–0.860, twelve distinct values. Previously it was one constant pair
shared by all twelve pictures.

文字不再为了颜色牺牲亮度 / The tint no longer buys colour with brightness

旧的求解策略是"取仍满足对比度目标的最不极端亮度"。在近白配色下这意味着暗壁纸的文字停在
OKLCH L 0.75 —— 用近四分之一的亮度刻度换 0.025 的色度,看着就是褪色的灰。现在亮度只允许
为了色度偏离配色自带值 0.055。

壁纸 旧 ink 新 ink 默认沉浸度对比度
01 #c7aeb6 #fae0e8 6.00 → 9.97
04 #bca7a9 #f8e1e3 6.29 → 11.49
09 #9fb6b8 #d6edf0 6.01 → 10.51

沉浸度拉满时文字仍然读得清 / Text survives the far end of the dial

画布过去在满沉浸时是常数 0.02,于是它就是壁纸本身,暗色配色下亮壁纸上的文字掉到 1.40–2.30:1。
现在画布的薄端也按对比度解算:06 从 1.40 → 4.84、07 从 2.28 → 6.06、08 从 2.09 → 6.00、
12 从 2.30 → 6.06。暗壁纸解算出 0,地板生效,那里的满沉浸依旧是"纯壁纸"。

The canvas used to be a flat 0.02 at full immersion, which is the picture itself — 1.40–2.30:1 for
the dark palette on a bright picture. Its thin end is now solved for contrast too. Dark pictures
still solve to zero, so full immersion is unchanged there.

一条明说的边界 / One limit, stated rather than hidden

浅色配色的白纱只发解算值的一半(半张白纸盖上去就不是壁纸了),所以浅色配色配暗壁纸在极高
沉浸度下是 3.5–3.9:1
—— 高于 3:1 的可读底线,低于 WCAG AA。默认沉浸度下两套配色最差为
5.75:1 / 5.67:1。选择器显示的一直是实测值。

The light palette ships half of its solved white veil, which puts it at 3.5–3.9:1 on dark wallpapers
at the far end of the dial: above the 3:1 legibility floor, below AA. At the default immersion the
worst is 5.75:1 (dark) and 5.67:1 (light).

声明可以自己核对 / The claims are checkable

tools/audit-core.mjs 随仓库发布,逐条对着构建产物里的数字核对,而不是对着"本该生成这些
数字的代码",另加一条接线检查:样式表读的每一个自定义属性,客户端必须有人发布——就是能抓到
上面第 1 个问题的那条。

node tools/audit-core.mjs

包更小了 / A smaller package

files 原本整目录带 assets,把四张店面截图(1.25 MiB)也打了进去,运行时没有任何代码读它们。
现在 58 个文件,8.0 MiB。

素材 / Assets

代码 MIT;美术素材不是。游戏美术与签名版权归鹰角网络(Hypergryph / Studio Montagne),
每张插画仍归绘制它的画师本人所有,图标取自 PRTS Wiki。素材随包分发,仅供个人在本地使用。
详见 ARTWORK-ATTRIBUTION.md 与 ICON-ATTRIBUTION.md。

The code is MIT; the artwork is not. Game art and the signatures belong to Hypergryph / Studio
Montagne, each illustration remains its illustrator's, and the icons come from the PRTS wiki.
Bundled for personal, local use only.

v1.0.0 — 明日方舟主题美化包 / Arknights Theme Pack

Choose a tag to compare

@Theflowyears Theflowyears released this 28 Sep 11:23

明日方舟主题美化包 · Arknights Theme Pack — v1.0.0

为《明日方舟》玩家在 DeepSeek Harness Web 上构建沉浸感的主题包。
Building immersion for Arknights players on the DeepSeek Harness Web GUI.

安装 / Install

预构建包(本页附件,免构建授权)/ Prebuilt package (the asset below, no build approval):

dsh plugin add https://github.com/Theflowyears/dsh-arknights-theme/releases/download/v1.0.0/dsh-arknights-theme-1.0.0.tgz

从仓库安装 / From the repository:

dsh plugin add Theflowyears/dsh-arknights-theme

装完重启 dsh web 再刷新页面。两种装法都依赖 package.json 里的 dsh.bundle。
Restart dsh web afterwards, then reload. Both routes rely on the dsh.bundle manifest.

这一版里有什么 / What is in it

  • 12 张整屏壁纸,虚化半径、羽化宽度与遮罩浓度按每张图自己的色彩统计算出,不是一套固定参数(实测虚化 σ 16.7–33.3)。
    Twelve full-screen wallpapers whose blur, feathering and scrim are computed per image (measured σ 16.7–33.3).
  • 文字色以 OKLCH 求解,在最差那层玻璃上仍守住 WCAG AA;沉浸度滑杆实时显示实测对比度。
    Ink solved in OKLCH to hold WCAG AA on the worst surface; the immersion dial shows the measured contrast live.
  • 罗德岛图标体系:侧栏、新会话、文件夹行、折叠控件、壁纸控件、选择器页眉、输入栏圆章与会话数据前的国家徽记。
    Rhodes Island iconography across sidebar, new session, folder rows, fold chip, wallpaper controls, picker header, composer roundel and session figures.
  • 签字式交互:批准条「允许」带阿米娅签名、「拒绝」带凯尔希签名;选项卡「提交」带博士签名、「跳过本题」带特蕾西娅签名。四张签名随包分发,以 alpha 上色,深浅两套配色下都清楚。
    Sign-off interactions: Amiya and Kal'tsit sign approve/reject; the Doctor and Theresa sign submit/skip. All four ship in the package and are painted through their alpha channel, so they read on both palettes.
  • 空会话页:明日方舟字标、「重铸未来,方舟启航」艺术字标题、方舟配色的预览角标。
  • 一键换壁纸:侧栏「切换」直接下一张(Shift 反向);默认落在第 12 张,按 id 记住,重启后仍在。

素材 / Assets

代码 MIT;美术素材不是。游戏美术与签名版权归鹰角网络(Hypergryph / Studio Montagne),
每张插画仍归绘制它的画师本人所有,图标取自 PRTS Wiki。素材随包分发,仅供个人在本地使用。
详见 ARTWORK-ATTRIBUTION.md 与 ICON-ATTRIBUTION.md。

The code is MIT; the artwork is not. Game art and the signatures belong to Hypergryph / Studio Montagne,
each illustration remains its illustrator's, and the icons come from the PRTS wiki. Bundled for
personal, local use only.

本压缩包里的文件清单:lib/(宿主与客户端)、assets/(36 张壁纸、两份清单、样式表、四张签名)、
icons/、cordis.patch.yml、README.md、两份署名文件与 LICENSE —— 共 58 个文件,8.0 MB。