@iasiv5/dsh-skins 1.5.6 → 1.5.8
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 +10 -3
- package/README.i18n.yaml +2 -2
- package/README.md +10 -3
- package/lib/client.js +13 -3
- package/lib/index.js +17 -3
- package/package.json +9 -8
package/README.en.md
CHANGED
|
@@ -42,6 +42,13 @@ dsh plugin --profile web remove @iasiv5/dsh-skins # uninstall
|
|
|
42
42
|
|
|
43
43
|
With the [dsh-m](https://github.com/iasiv5/dsh-m) plugin marketplace installed, you can also install / uninstall this plugin with one click inside the DSH Web UI.
|
|
44
44
|
|
|
45
|
+
**Pick the plugin version for your DSH version**:
|
|
46
|
+
|
|
47
|
+
| Your DSH version | Plugin version |
|
|
48
|
+
|---|---|
|
|
49
|
+
| `0.2.0-rc.1` and later (Web and Desktop alike) | `@latest` (1.5.8+) |
|
|
50
|
+
| `0.1.x` | `1.5.7` (last release supporting that line) |
|
|
51
|
+
|
|
45
52
|
<details>
|
|
46
53
|
<summary>Hand the install to your Agent (prompt install)</summary>
|
|
47
54
|
|
|
@@ -140,7 +147,7 @@ In the **DSH Desktop app**, the shell chrome — sidebar, caption strip, right p
|
|
|
140
147
|
|
|
141
148
|

|
|
142
149
|
|
|
143
|
-
- Verified with dsh Desktop `0.2.
|
|
150
|
+
- Verified with dsh Desktop `0.2.1-rc.2` (Windows); macOS / Linux Desktop currently follow the Web form and will be adapted in a later release.
|
|
144
151
|
- The right panel in fullscreen is the solid skin base color; the wallpaper is not shown through it.
|
|
145
152
|
|
|
146
153
|
## The skin switcher
|
|
@@ -173,10 +180,10 @@ Pick "DeepSeek Harness (Official)" in the skin switcher, or open `/?skin=officia
|
|
|
173
180
|
Update duty has moved to the dsh-m marketplace and the DSH CLI (ADR-0008); the skin switcher only handles skins and personalization.
|
|
174
181
|
|
|
175
182
|
**Which DSH Web versions are supported?**
|
|
176
|
-
Verified with DSH Web `0.2.0-rc.2`. Later rc builds of the same series are expected to work, but unverified versions carry no promise.
|
|
183
|
+
Verified with DSH Web `0.2.0-rc.2`. Later rc builds of the same series are expected to work, but unverified versions carry no promise. Requires DSH `0.2.0-rc.1` or later; older DSH versions are blocked from upgrading to 1.5.8+ by the peer dependency floor.
|
|
177
184
|
|
|
178
185
|
**Is the Desktop profile supported?**
|
|
179
|
-
Yes. The DSH Desktop app and the Web profile are installed independently and do not affect each other; the desktop form (solid chrome + wallpaper in the conversation area) is described under "The Desktop profile". Verified with dsh Desktop `0.2.
|
|
186
|
+
Yes. The DSH Desktop app and the Web profile are installed independently and do not affect each other; the desktop form (solid chrome + wallpaper in the conversation area) is described under "The Desktop profile". Verified with dsh Desktop `0.2.1-rc.2` (Windows).
|
|
180
187
|
|
|
181
188
|
**Does my appearance preference sync across browsers?**
|
|
182
189
|
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:
|
|
6
|
-
README.en.md:
|
|
5
|
+
README.md: efd7cba38981f2250296678a90448e6ecda7088a
|
|
6
|
+
README.en.md: 31497e8721472557f89af32cdb78a827ff9f0232
|
package/README.md
CHANGED
|
@@ -42,6 +42,13 @@ dsh plugin --profile web remove @iasiv5/dsh-skins # 卸载
|
|
|
42
42
|
|
|
43
43
|
安装了 [dsh-m](https://github.com/iasiv5/dsh-m) 插件市场的话,也可以直接在 DSH Web 界面里一键安装 / 卸载本插件。
|
|
44
44
|
|
|
45
|
+
**按 DSH 版本选插件版本**:
|
|
46
|
+
|
|
47
|
+
| 你的 DSH 版本 | 插件版本 |
|
|
48
|
+
|---|---|
|
|
49
|
+
| `0.2.0-rc.1` 及以上(web 与 Desktop 通用) | `@latest`(1.5.8+) |
|
|
50
|
+
| `0.1.x` | `1.5.7`(该线的最后支持版) |
|
|
51
|
+
|
|
45
52
|
<details>
|
|
46
53
|
<summary>把安装交给 Agent(提示词安装法)</summary>
|
|
47
54
|
|
|
@@ -140,7 +147,7 @@ dsh plugin --profile web remove @iasiv5/dsh-skins # 卸载
|
|
|
140
147
|
|
|
141
148
|

|
|
142
149
|
|
|
143
|
-
- 已在 dsh Desktop `0.2.
|
|
150
|
+
- 已在 dsh Desktop `0.2.1-rc.2`(Windows)验证;macOS / Linux Desktop 当前跟随 Web 形态,后续版本适配。
|
|
144
151
|
- 右栏面板全屏时为实色皮肤底、不透出壁纸;面板「收起/关闭」后的空轨道行为属宿主布局。
|
|
145
152
|
|
|
146
153
|
## 皮肤切换器
|
|
@@ -173,10 +180,10 @@ URL 也能切皮肤:`/?skin=official`、`/?skin=openbmc`、`/?skin=uefi-harnes
|
|
|
173
180
|
更新职责已移交 dsh-m 市场与 DSH CLI(ADR-0008);皮肤切换器只负责换肤与个性化。
|
|
174
181
|
|
|
175
182
|
**支持哪些 DSH Web 版本?**
|
|
176
|
-
已使用 DSH Web `0.2.0-rc.2` 验证。同系列 rc
|
|
183
|
+
已使用 DSH Web `0.2.0-rc.2` 验证。同系列 rc 版本理论上兼容,未经验证的版本不作承诺。最低支持 DSH `0.2.0-rc.1`:更旧的 DSH 版本会被 peer 依赖门槛挡住,无法升级到 1.5.8+。
|
|
177
184
|
|
|
178
185
|
**支持 Desktop profile 吗?**
|
|
179
|
-
支持。DSH Desktop 应用与 Web profile 各自独立安装、互不影响;桌面形态(实色外壳 + 会话区壁纸)见「Desktop profile 上的形态」。已使用 dsh Desktop `0.2.
|
|
186
|
+
支持。DSH Desktop 应用与 Web profile 各自独立安装、互不影响;桌面形态(实色外壳 + 会话区壁纸)见「Desktop profile 上的形态」。已使用 dsh Desktop `0.2.1-rc.2`(Windows)验证。
|
|
180
187
|
|
|
181
188
|
**外观偏好在不同的浏览器间同步吗?**
|
|
182
189
|
在 DSH 所在机器的浏览器(loopback)上,偏好由 DSH Host 持久化,天然共享。其他远程浏览器由插件将偏好存入本地 `localStorage`,各浏览器独立、互不覆盖。
|
package/lib/client.js
CHANGED
|
@@ -1703,7 +1703,13 @@ ${names}`,
|
|
|
1703
1703
|
// 毛玻璃弹层(dsh-quota-watch 同款配方):86% 不透明底 + blur14 提饱和,
|
|
1704
1704
|
// 下层文字被底色盖住、只余柔光,弹层文字保持清晰可读;首条 solid 声明
|
|
1705
1705
|
// 兜底不支持 color-mix 的浏览器。
|
|
1706
|
-
|
|
1706
|
+
// Width term reserves 16px margins per side on sub-414px viewports (the
|
|
1707
|
+
// 390px cap keeps every wider viewport untouched). The old 24px term left
|
|
1708
|
+
// only ~10px of right margin once the trigger-anchored left offset was
|
|
1709
|
+
// paid, and — combined with the fixed 360px list column — clipped the
|
|
1710
|
+
// gear column at the pop's own edge on phones (field report 2026-10-14:
|
|
1711
|
+
// 手机上齿轮被截半 + 横向滚动条).
|
|
1712
|
+
".dsh-skins-pop{position:fixed;z-index:60;box-sizing:border-box;display:flex;flex-direction:column;gap:8px;width:min(390px,calc(100vw - 32px));max-height:calc(100vh - 24px);padding:14px;border:1px solid var(--dsw-alias-border-l2);border-radius:14px;background:var(--dsw-alias-bg-elevated,var(--dsw-alias-bg-overlay));background:color-mix(in srgb,var(--dsw-alias-bg-base,#1f1f1f) 86%,transparent);backdrop-filter:blur(14px) saturate(1.3);-webkit-backdrop-filter:blur(14px) saturate(1.3);color:var(--dsw-alias-label-primary);box-shadow:var(--dsw-shadow-lv3,0 8px 24px rgba(0,0,0,.14));overflow-y:auto;transition:width .2s ease-out}",
|
|
1707
1713
|
// Slim themed scrollbars for the shell's own scroll region (list-only
|
|
1708
1714
|
// popover): thin + token-colored thumb, WebKit and Firefox both covered.
|
|
1709
1715
|
".dsh-skins-pop{scrollbar-width:thin;scrollbar-color:var(--dsw-alias-border-l2) transparent}",
|
|
@@ -1749,7 +1755,11 @@ ${names}`,
|
|
|
1749
1755
|
"body[data-ds-dark-theme]:not([data-dsh-meirenzhi-skin]):not([data-dsh-openbmc-skin]):not([data-dsh-uefi-harness]) .dsh-skins-pop{background:rgba(41,42,44,0.97)}",
|
|
1750
1756
|
// -- combined shell (Q44/Q46): list column + docked panel column ----------
|
|
1751
1757
|
".dsh-skins-pop.dsh-skins-wide{flex-direction:row;align-items:stretch;width:min(1105px,calc(100vw - 24px))}",
|
|
1752
|
-
|
|
1758
|
+
// List column: exactly 360px wherever the 390px narrow shell fits (the
|
|
1759
|
+
// v2.5 宽度恒定 ruling #10/#11), shrinking only BELOW a 414px viewport —
|
|
1760
|
+
// a fixed 360px column inside a narrower pop overflowed horizontally and
|
|
1761
|
+
// pushed the gear column behind the pop's right edge (same field report).
|
|
1762
|
+
".dsh-skins-pop-main{display:flex;flex-direction:column;gap:8px;min-width:0;width:min(360px,100%);flex:none}",
|
|
1753
1763
|
".dsh-skins-pop.dsh-skins-wide .dsh-skins-pop-main{flex:0 0 360px}",
|
|
1754
1764
|
// box-sizing is NOT inherited: without border-box here, the sweep's
|
|
1755
1765
|
// measured rect width feeds flex-basis as a CONTENT width (+15px padding/
|
|
@@ -2005,7 +2015,7 @@ ${names}`,
|
|
|
2005
2015
|
});
|
|
2006
2016
|
const showPersonalization = personalizeId !== null && PersonalizationPanel !== null;
|
|
2007
2017
|
const stackedSheet = showPersonalization && typeof window !== "undefined" && window.innerWidth <= 904;
|
|
2008
|
-
const shellLeft = box === null ? void 0 : showPersonalization && typeof window !== "undefined" ? Math.max(12, Math.min(box.left, window.innerWidth - 1117)) : box.left;
|
|
2018
|
+
const shellLeft = box === null ? void 0 : showPersonalization && typeof window !== "undefined" ? Math.max(12, Math.min(box.left, window.innerWidth - 1117)) : typeof window !== "undefined" ? Math.max(16, Math.min(box.left, window.innerWidth - Math.min(390, window.innerWidth - 32) - 16)) : box.left;
|
|
2009
2019
|
const shellMaxHeight = box === null || typeof window === "undefined" || typeof window.innerHeight !== "number" ? void 0 : stackedSheet ? window.innerHeight - 24 : Math.max(220, window.innerHeight - box.bottom - 12);
|
|
2010
2020
|
react.useLayoutEffect(() => {
|
|
2011
2021
|
if (!open || box === null) return void 0;
|
package/lib/index.js
CHANGED
|
@@ -1065,7 +1065,7 @@ function mountPersonalizationRoutes(host, options) {
|
|
|
1065
1065
|
const { store, assetsBasePath = "/dsh-skins/assets", trustedHosts = [] } = options;
|
|
1066
1066
|
const disposers = [];
|
|
1067
1067
|
const fence = (request, response) => {
|
|
1068
|
-
if (isTrustedRequest(request, trustedHosts)) return true;
|
|
1068
|
+
if (isTrustedRequest(request, typeof trustedHosts === "function" ? trustedHosts() : trustedHosts)) return true;
|
|
1069
1069
|
sendJson(response, 403, { error: "trusted DSH Web request required" });
|
|
1070
1070
|
return false;
|
|
1071
1071
|
};
|
|
@@ -1182,6 +1182,20 @@ function mountPersonalizationRoutes(host, options) {
|
|
|
1182
1182
|
};
|
|
1183
1183
|
}
|
|
1184
1184
|
|
|
1185
|
+
// src/host/trusted-hosts.js
|
|
1186
|
+
function resolveTrustedHosts(ctx) {
|
|
1187
|
+
let startup, runtime;
|
|
1188
|
+
try {
|
|
1189
|
+
startup = ctx?.get?.("webStartup");
|
|
1190
|
+
} catch {
|
|
1191
|
+
}
|
|
1192
|
+
try {
|
|
1193
|
+
runtime = ctx?.get?.("webRuntime");
|
|
1194
|
+
} catch {
|
|
1195
|
+
}
|
|
1196
|
+
return startup?.trustedHosts ?? runtime?.trustedHosts ?? [];
|
|
1197
|
+
}
|
|
1198
|
+
|
|
1185
1199
|
// src/index.js
|
|
1186
1200
|
var name = "@iasiv5/dsh-skins";
|
|
1187
1201
|
function expandHomePath(path) {
|
|
@@ -1218,7 +1232,7 @@ function dataDirForProfile(root, profile) {
|
|
|
1218
1232
|
return desktop;
|
|
1219
1233
|
}
|
|
1220
1234
|
function apply(ctx) {
|
|
1221
|
-
ctx.inject(["webServer"
|
|
1235
|
+
ctx.inject(["webServer"], (hostContext) => {
|
|
1222
1236
|
const root = dshHome();
|
|
1223
1237
|
const profile = hostProfileFor(root);
|
|
1224
1238
|
const personalization = createPersonalizationStore({
|
|
@@ -1228,7 +1242,7 @@ function apply(ctx) {
|
|
|
1228
1242
|
hostContext.effect(() => {
|
|
1229
1243
|
return mountPersonalizationRoutes(hostContext, {
|
|
1230
1244
|
store: personalization,
|
|
1231
|
-
trustedHosts:
|
|
1245
|
+
trustedHosts: () => resolveTrustedHosts(ctx)
|
|
1232
1246
|
});
|
|
1233
1247
|
}, "dsh-skins: personalization routes");
|
|
1234
1248
|
});
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iasiv5/dsh-skins",
|
|
3
3
|
"description": "DSH Web 皮肤插件:多套品牌皮肤侧栏热切换。",
|
|
4
|
-
"version": "1.5.
|
|
4
|
+
"version": "1.5.8",
|
|
5
5
|
"homepage": "https://github.com/iasiv5/dsh-skins#readme",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -55,18 +55,19 @@
|
|
|
55
55
|
},
|
|
56
56
|
"peerDependencies": {
|
|
57
57
|
"@deepseek-ai/cordis": "^4.0.1",
|
|
58
|
-
"@deepseek-ai/dsh-client-connection": ">=0.1.1-rc.
|
|
59
|
-
"@deepseek-ai/dsh-client-locale": ">=0.1.1-rc.
|
|
60
|
-
"@deepseek-ai/dsh-client-runtime": ">=0.1.1-rc.
|
|
61
|
-
"@deepseek-ai/dsh-client-ui-conversation": ">=0.1.1-rc.
|
|
62
|
-
"@deepseek-ai/dsh-client-ui-sidebar": ">=0.1.1-rc.
|
|
63
|
-
"@deepseek-ai/dsh-client-ui-theme": ">=0.1.1-rc.
|
|
58
|
+
"@deepseek-ai/dsh-client-connection": ">=0.2.0-rc.1 || >=0.2.1-rc.1",
|
|
59
|
+
"@deepseek-ai/dsh-client-locale": ">=0.2.0-rc.1 || >=0.2.1-rc.1",
|
|
60
|
+
"@deepseek-ai/dsh-client-runtime": ">=0.2.0-rc.1 || >=0.2.1-rc.1",
|
|
61
|
+
"@deepseek-ai/dsh-client-ui-conversation": ">=0.2.0-rc.1 || >=0.2.1-rc.1",
|
|
62
|
+
"@deepseek-ai/dsh-client-ui-sidebar": ">=0.2.0-rc.1 || >=0.2.1-rc.1",
|
|
63
|
+
"@deepseek-ai/dsh-client-ui-theme": ">=0.2.0-rc.1 || >=0.2.1-rc.1"
|
|
64
64
|
},
|
|
65
65
|
"license": "MIT",
|
|
66
66
|
"devDependencies": {
|
|
67
67
|
"@deepseek-ai/cordis": "^4.0.4",
|
|
68
68
|
"esbuild": "^0.28.2",
|
|
69
|
-
"playwright-core": "1.62.1"
|
|
69
|
+
"playwright-core": "1.62.1",
|
|
70
|
+
"semver": "^7.8.5"
|
|
70
71
|
},
|
|
71
72
|
"scripts": {
|
|
72
73
|
"build": "node scripts/build-client.mjs",
|