@iasiv5/dsh-skins 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.en.md CHANGED
@@ -4,7 +4,7 @@
4
4
  [![CI](https://img.shields.io/github/actions/workflow/status/iasiv5/dsh-skins/ci.yml?branch=main&label=CI)](../../actions/workflows/ci.yml)
5
5
  [![License](https://img.shields.io/github/license/iasiv5/dsh-skins?label=License)](./LICENSE)
6
6
  [![npm](https://img.shields.io/npm/v/@iasiv5/dsh-skins?label=npm)](https://www.npmjs.com/package/@iasiv5/dsh-skins)
7
- [![DSH Web](https://img.shields.io/badge/DSH%20Web-0.1.1--rc.2%20verified-2563eb)](#faq)
7
+ [![DSH Web](https://img.shields.io/badge/DSH%20Web-0.1.2--rc.1%20verified-2563eb)](#faq)
8
8
 
9
9
  English · [中文](./README.md)
10
10
 
@@ -179,7 +179,7 @@ Pick "DeepSeek Harness (Official)" in the skin switcher, or open `/?skin=officia
179
179
  Updates follow a "back up first, then install" transaction: any verification failure automatically restores the previous version, and the popover shows the failure reason (in Chinese and English). If it still fails, update manually with `dsh plugin --profile web update @iasiv5/dsh-skins`.
180
180
 
181
181
  **Which DSH Web versions are supported?**
182
- Verified with DSH Web `0.1.1-rc.2`. Later rc builds of the same series are expected to work, but unverified versions carry no promise.
182
+ Verified with DSH Web `0.1.2-rc.1`. Later rc builds of the same series are expected to work, but unverified versions carry no promise.
183
183
 
184
184
  **Does my appearance preference sync across browsers?**
185
185
  In the browser on the DSH host machine (loopback), the preference is persisted by the DSH Host and shared naturally. Other remote browsers keep the preference in their own `localStorage` — independent per browser, never overwritten.
package/README.i18n.yaml CHANGED
@@ -2,5 +2,5 @@
2
2
  # last confirmed-consistent state. Both languages carry equal authority;
3
3
  # after editing either side, bring the other along and re-record with:
4
4
  # node scripts/verify-readme-pairing.mjs --write
5
- README.md: 176f4f5f3706650e90cea41188369d77989dcae5
6
- README.en.md: 6afc01d954fd7c40ba37151c0b9b9f73c4967021
5
+ README.md: c7707edb3153d695fe102d83fa78beb1ee3e6fa9
6
+ README.en.md: 9013e7c5796ac490e4e19eff59939f8267a66680
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  [![CI](https://img.shields.io/github/actions/workflow/status/iasiv5/dsh-skins/ci.yml?branch=main&label=CI)](../../actions/workflows/ci.yml)
5
5
  [![License](https://img.shields.io/github/license/iasiv5/dsh-skins?label=License)](./LICENSE)
6
6
  [![npm](https://img.shields.io/npm/v/@iasiv5/dsh-skins?label=npm)](https://www.npmjs.com/package/@iasiv5/dsh-skins)
7
- [![DSH Web](https://img.shields.io/badge/DSH%20Web-0.1.1--rc.2%20verified-2563eb)](#faq)
7
+ [![DSH Web](https://img.shields.io/badge/DSH%20Web-0.1.2--rc.1%20verified-2563eb)](#faq)
8
8
 
9
9
  [English](./README.en.md) · 中文
10
10
 
@@ -179,7 +179,7 @@ URL 也能切皮肤:`/?skin=official`、`/?skin=meirenzhi`、`/?skin=openbmc`
179
179
  更新遵循「先备份、再安装」的事务流程,任何校验失败都会自动恢复原版本,弹层显示失败原因(中英双语)。仍失败时可用 `dsh plugin --profile web update @iasiv5/dsh-skins` 手动更新。
180
180
 
181
181
  **支持哪些 DSH Web 版本?**
182
- 已使用 DSH Web `0.1.1-rc.2` 验证。同系列 rc 版本理论上兼容,未经验证的版本不作承诺。
182
+ 已使用 DSH Web `0.1.2-rc.1` 验证。同系列 rc 版本理论上兼容,未经验证的版本不作承诺。
183
183
 
184
184
  **外观偏好在不同的浏览器间同步吗?**
185
185
  在 DSH 所在机器的浏览器(loopback)上,偏好由 DSH Host 持久化,天然共享。其他远程浏览器由插件将偏好存入本地 `localStorage`,各浏览器独立、互不覆盖。
package/lib/client.js CHANGED
@@ -2757,11 +2757,17 @@ ${names}`);
2757
2757
  // 暗=雾白底玄夜字。#12121A/#FAF9F6 与面板底色族同源。
2758
2758
  `${SCOPE} .dsh-mrz-badge{display:inline-flex;align-items:center;background:#12121A;border-radius:4px;padding:0 5px;font-size:10px;line-height:16px;font-weight:600;letter-spacing:.08em;color:#FAF9F6}`,
2759
2759
  `body[data-dsh-meirenzhi-skin][data-ds-dark-theme] .dsh-mrz-badge{background:#FAF9F6;color:#12121A}`,
2760
- // 用户气泡描边 + 轻投影(openbmc 同款泡泡边框:框出用户输入区)。哈希类
2761
- // gdEzaW_bubble 随 conversation 插件版本构建,版本升级若失效仅影响描边
2762
- // 装饰,token 填充不受影响。
2763
- `${SCOPE} .gdEzaW_bubble{border:1px solid rgba(184, 67, 63, 0.38);box-shadow:0 1px 4px rgba(184, 67, 63, 0.10)}`,
2764
- `body[data-dsh-meirenzhi-skin][data-ds-dark-theme] .gdEzaW_bubble{border-color:rgba(229, 138, 128, 0.38);box-shadow:0 1px 6px rgba(229, 138, 128, 0.10)}`,
2760
+ // 用户气泡描边 + 轻投影(openbmc 同款泡泡边框:框出用户输入区)。挂接用
2761
+ // :is() 并集(精确哈希 ∪ 结构化,见 docs/adr/0006):哈希漂移与 DOM 结构
2762
+ // 变化两种单点故障各有一支兜底,钩子前提由 verify-upstream-hooks 守卫在
2763
+ // check 时钉住。失效仅影响描边装饰,token 填充不受影响。
2764
+ `${SCOPE} :is([class*="Sixlwa_bubble"], [class*="userStack"] > [class*="_bubble"]){border:1px solid rgba(184, 67, 63, 0.38);box-shadow:0 1px 4px rgba(184, 67, 63, 0.10)}`,
2765
+ `body[data-dsh-meirenzhi-skin][data-ds-dark-theme] :is([class*="Sixlwa_bubble"], [class*="userStack"] > [class*="_bubble"]){border-color:rgba(229, 138, 128, 0.38);box-shadow:0 1px 6px rgba(229, 138, 128, 0.10)}`,
2766
+ // 目标面板气泡(goal stack > bubble,与用户气泡同族描边)。ADR-0006 v1.0.4
2767
+ // amendment:主人目测 goal 无描边观感不佳,裁决扩入;同款并集策略,守卫
2768
+ // 清单已登记 goal 精确哈希与 _stack 结构前提。
2769
+ `${SCOPE} :is([class*="oRe1gG_bubble"], [class*="_stack"] > [class*="_bubble"]){border:1px solid rgba(184, 67, 63, 0.38);box-shadow:0 1px 4px rgba(184, 67, 63, 0.10)}`,
2770
+ `body[data-dsh-meirenzhi-skin][data-ds-dark-theme] :is([class*="oRe1gG_bubble"], [class*="_stack"] > [class*="_bubble"]){border-color:rgba(229, 138, 128, 0.38);box-shadow:0 1px 6px rgba(229, 138, 128, 0.10)}`,
2765
2771
  // Ambient motion: a slow glow-breath riding the runtime's wallpaper ::before
2766
2772
  // layer + two drifting fireflies on the #root pseudo budget (same shape and
2767
2773
  // cost as the tgcf butterflies); prefers-reduced-motion kills all of it.
@@ -3106,13 +3112,27 @@ ${names}`);
3106
3112
  body[data-dsh-openbmc-skin][data-ds-dark-theme] {
3107
3113
  /* 暗色气泡填充由 ③ 暗色块的深冰蓝接管(rgba(20,41,60,.90)),此处不再重定义 */
3108
3114
  }
3109
- /* 用户气泡描边 + 轻投影(哈希类 gdEzaW_bubble 随 conversation 插件版本构建,
3110
- * 版本升级若失效仅影响描边装饰,token 填充仍然生效) */
3111
- body[data-dsh-openbmc-skin] .gdEzaW_bubble {
3115
+ /* 用户气泡描边 + 轻投影(框出用户输入区)。挂接用 :is() 并集(精确哈希 ∪
3116
+ * 结构化,见 docs/adr/0006):哈希漂移与 DOM 结构变化两种单点故障各有一支
3117
+ * 兜底,钩子前提由 verify-upstream-hooks 守卫在 check 时钉住。失效仅影响
3118
+ * 描边装饰,token 填充仍然生效;结构分支不命中 goal 面板气泡(其容器
3119
+ * _stack 不含 userStack 子串,ADR-0006 实测),goal 维持不描边。 */
3120
+ body[data-dsh-openbmc-skin] :is([class*="Sixlwa_bubble"], [class*="userStack"] > [class*="_bubble"]) {
3112
3121
  border: 1px solid rgba(0, 131, 176, 0.38);
3113
3122
  box-shadow: 0 1px 4px rgba(0, 131, 176, 0.10);
3114
3123
  }
3115
- body[data-dsh-openbmc-skin][data-ds-dark-theme] .gdEzaW_bubble {
3124
+ body[data-dsh-openbmc-skin][data-ds-dark-theme] :is([class*="Sixlwa_bubble"], [class*="userStack"] > [class*="_bubble"]) {
3125
+ border-color: rgba(62, 193, 232, 0.38);
3126
+ box-shadow: 0 1px 6px rgba(62, 193, 232, 0.10);
3127
+ }
3128
+ /* 目标面板气泡(goal stack > bubble,与用户气泡同族描边)。ADR-0006
3129
+ * v1.0.4 amendment:主人目测 goal 无描边观感不佳,裁决扩入;同款并集
3130
+ * 策略,守卫清单已登记 goal 精确哈希与 _stack 结构前提。 */
3131
+ body[data-dsh-openbmc-skin] :is([class*="oRe1gG_bubble"], [class*="_stack"] > [class*="_bubble"]) {
3132
+ border: 1px solid rgba(0, 131, 176, 0.38);
3133
+ box-shadow: 0 1px 4px rgba(0, 131, 176, 0.10);
3134
+ }
3135
+ body[data-dsh-openbmc-skin][data-ds-dark-theme] :is([class*="oRe1gG_bubble"], [class*="_stack"] > [class*="_bubble"]) {
3116
3136
  border-color: rgba(62, 193, 232, 0.38);
3117
3137
  box-shadow: 0 1px 6px rgba(62, 193, 232, 0.10);
3118
3138
  }
@@ -3302,14 +3322,26 @@ body[data-dsh-uefi-harness] [data-streaming] {
3302
3322
  border-radius: 4px;
3303
3323
  box-shadow: inset 3px 0 0 var(--dsw-alias-brand-primary);
3304
3324
  }
3305
- /* 用户气泡描边 + 轻投影(openbmc 同款泡泡边框:框出用户输入区)。哈希类
3306
- * gdEzaW_bubble 随 conversation 插件版本构建,版本升级若失效仅影响描边
3307
- * 装饰,token 填充仍然生效。 */
3308
- body[data-dsh-uefi-harness] .gdEzaW_bubble {
3325
+ /* 用户气泡描边 + 轻投影(openbmc 同款泡泡边框:框出用户输入区)。挂接用
3326
+ * :is() 并集(精确哈希 ∪ 结构化,见 docs/adr/0006):哈希漂移与 DOM 结构
3327
+ * 变化两种单点故障各有一支兜底,钩子前提由 verify-upstream-hooks 守卫在
3328
+ * check 时钉住。失效仅影响描边装饰,token 填充仍然生效。 */
3329
+ body[data-dsh-uefi-harness] :is([class*="Sixlwa_bubble"], [class*="userStack"] > [class*="_bubble"]) {
3330
+ border: 1px solid rgba(101, 83, 216, 0.38);
3331
+ box-shadow: 0 1px 4px rgba(101, 83, 216, 0.10);
3332
+ }
3333
+ body[data-dsh-uefi-harness][data-ds-dark-theme] :is([class*="Sixlwa_bubble"], [class*="userStack"] > [class*="_bubble"]) {
3334
+ border-color: rgba(169, 156, 255, 0.38);
3335
+ box-shadow: 0 1px 6px rgba(169, 156, 255, 0.10);
3336
+ }
3337
+ /* 目标面板气泡(goal stack > bubble,与用户气泡同族描边)。ADR-0006
3338
+ * v1.0.4 amendment:主人目测 goal 无描边观感不佳,裁决扩入;同款并集
3339
+ * 策略,守卫清单已登记 goal 精确哈希与 _stack 结构前提。 */
3340
+ body[data-dsh-uefi-harness] :is([class*="oRe1gG_bubble"], [class*="_stack"] > [class*="_bubble"]) {
3309
3341
  border: 1px solid rgba(101, 83, 216, 0.38);
3310
3342
  box-shadow: 0 1px 4px rgba(101, 83, 216, 0.10);
3311
3343
  }
3312
- body[data-dsh-uefi-harness][data-ds-dark-theme] .gdEzaW_bubble {
3344
+ body[data-dsh-uefi-harness][data-ds-dark-theme] :is([class*="oRe1gG_bubble"], [class*="_stack"] > [class*="_bubble"]) {
3313
3345
  border-color: rgba(169, 156, 255, 0.38);
3314
3346
  box-shadow: 0 1px 6px rgba(169, 156, 255, 0.10);
3315
3347
  }`;
@@ -3417,11 +3449,17 @@ body[data-dsh-uefi-harness][data-ds-dark-theme] .gdEzaW_bubble {
3417
3449
  // 墨黑/素白 (same values panelBase tints the glass with).
3418
3450
  `${SCOPE2} .dsh-tgcf-badge{display:inline-flex;align-items:center;background:#181010;border-radius:4px;padding:0 5px;font-size:10px;line-height:16px;font-weight:600;letter-spacing:.08em;color:#FFFCF6}`,
3419
3451
  `body[data-dsh-tgcf-skin][data-ds-dark-theme] .dsh-tgcf-badge{background:#FFFCF6;color:#181010}`,
3420
- // 用户气泡描边 + 轻投影(openbmc 同款泡泡边框:框出用户输入区)。哈希类
3421
- // gdEzaW_bubble 随 conversation 插件版本构建,版本升级若失效仅影响描边
3422
- // 装饰,token 填充不受影响。
3423
- `${SCOPE2} .gdEzaW_bubble{border:1px solid rgba(195, 39, 43, 0.38);box-shadow:0 1px 4px rgba(195, 39, 43, 0.10)}`,
3424
- `body[data-dsh-tgcf-skin][data-ds-dark-theme] .gdEzaW_bubble{border-color:rgba(224, 86, 74, 0.38);box-shadow:0 1px 6px rgba(224, 86, 74, 0.10)}`
3452
+ // 用户气泡描边 + 轻投影(openbmc 同款泡泡边框:框出用户输入区)。挂接用
3453
+ // :is() 并集(精确哈希 ∪ 结构化,见 docs/adr/0006):哈希漂移与 DOM 结构
3454
+ // 变化两种单点故障各有一支兜底,钩子前提由 verify-upstream-hooks 守卫在
3455
+ // check 时钉住。失效仅影响描边装饰,token 填充不受影响。
3456
+ `${SCOPE2} :is([class*="Sixlwa_bubble"], [class*="userStack"] > [class*="_bubble"]){border:1px solid rgba(195, 39, 43, 0.38);box-shadow:0 1px 4px rgba(195, 39, 43, 0.10)}`,
3457
+ `body[data-dsh-tgcf-skin][data-ds-dark-theme] :is([class*="Sixlwa_bubble"], [class*="userStack"] > [class*="_bubble"]){border-color:rgba(224, 86, 74, 0.38);box-shadow:0 1px 6px rgba(224, 86, 74, 0.10)}`,
3458
+ // 目标面板气泡(goal stack > bubble,与用户气泡同族描边)。ADR-0006 v1.0.4
3459
+ // amendment:主人目测 goal 无描边观感不佳,裁决扩入;同款并集策略,守卫
3460
+ // 清单已登记 goal 精确哈希与 _stack 结构前提。
3461
+ `${SCOPE2} :is([class*="oRe1gG_bubble"], [class*="_stack"] > [class*="_bubble"]){border:1px solid rgba(195, 39, 43, 0.38);box-shadow:0 1px 4px rgba(195, 39, 43, 0.10)}`,
3462
+ `body[data-dsh-tgcf-skin][data-ds-dark-theme] :is([class*="oRe1gG_bubble"], [class*="_stack"] > [class*="_bubble"]){border-color:rgba(224, 86, 74, 0.38);box-shadow:0 1px 6px rgba(224, 86, 74, 0.10)}`
3425
3463
  ].join("\n");
3426
3464
  function panelBase(lightMode, alpha) {
3427
3465
  return lightMode ? `rgba(255,252,246,${alpha})` : `rgba(24,16,16,${alpha})`;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@iasiv5/dsh-skins",
3
3
  "description": "Modular DSH Web skin pack with official fallback, OpenBMC and UEFI appearances, and verified stable-Release updates",
4
- "version": "1.0.2",
4
+ "version": "1.0.4",
5
5
  "homepage": "https://github.com/iasiv5/dsh-skins#readme",
6
6
  "repository": {
7
7
  "type": "git",
@@ -56,11 +56,11 @@
56
56
  },
57
57
  "peerDependencies": {
58
58
  "@deepseek-ai/cordis": "^4.0.1",
59
- "@deepseek-ai/dsh-client-connection": "^0.1.1-rc.2",
60
- "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.2",
61
- "@deepseek-ai/dsh-client-ui-conversation": "^0.1.1-rc.2",
62
- "@deepseek-ai/dsh-client-ui-sidebar": "^0.1.1-rc.2",
63
- "@deepseek-ai/dsh-client-ui-theme": "^0.1.1-rc.2"
59
+ "@deepseek-ai/dsh-client-connection": "^0.1.1-rc.2 || ^0.1.2-rc.1",
60
+ "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.2 || ^0.1.2-rc.1",
61
+ "@deepseek-ai/dsh-client-ui-conversation": "^0.1.1-rc.2 || ^0.1.2-rc.1",
62
+ "@deepseek-ai/dsh-client-ui-sidebar": "^0.1.1-rc.2 || ^0.1.2-rc.1",
63
+ "@deepseek-ai/dsh-client-ui-theme": "^0.1.1-rc.2 || ^0.1.2-rc.1"
64
64
  },
65
65
  "license": "MIT",
66
66
  "devDependencies": {
@@ -74,6 +74,7 @@
74
74
  "test": "pnpm run build && node smoke-test.cjs && node --test tests/*.test.mjs",
75
75
  "verify:readme": "node scripts/verify-readme-pairing.mjs",
76
76
  "verify:bundle": "node scripts/verify-bundle-guard.mjs",
77
- "check": "pnpm run build && node --check lib/client.js && node --check lib/index.js && pnpm run test && pnpm run verify:readme && pnpm run verify:bundle"
77
+ "verify:hooks": "node scripts/verify-upstream-hooks.mjs",
78
+ "check": "pnpm run build && node --check lib/client.js && node --check lib/index.js && pnpm run test && pnpm run verify:readme && pnpm run verify:bundle && pnpm run verify:hooks"
78
79
  }
79
80
  }