dsh-deepseek-style-theme 2.0.87 → 2.0.89
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.md +32 -30
- package/THIRD-PARTY-NOTICES.md +11 -3
- package/lib/client.js +41 -13
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -179,7 +179,33 @@ card=700/757 … under=div.wSkVaW_widthHandle hovCard=0 ← 倾斜解除、
|
|
|
179
179
|
|
|
180
180
|
**Windows 上不要用 `inject:`**:`inject:D:\...` 会因为盘符里的 `:` 被 pnpm 当成 registry 协议分隔符,去 registry 找一个名叫 `inject:D:\...` 的包并拿到 404。Windows 一律用 `file:`。
|
|
181
181
|
|
|
182
|
-
|
|
182
|
+
## 安装方式
|
|
183
|
+
|
|
184
|
+
### 从 npm(推荐)
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
dsh plugin --profile web add dsh-deepseek-style-theme
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
> **这是唯一计入 npm 下载量的安装方式。** 下面几条(`file:` / `github:` / 本地 tgz / 任意 git 源)
|
|
191
|
+
> 都绕开 registry,装多少次都不会让 npm 的统计动一下——邀请别人试用时请发上面这一条。
|
|
192
|
+
> 它同时是最省事的:不走 `git clone`(绕开代理 / 证书问题),也不依赖 GitHub Release 资产
|
|
193
|
+
> (绕开 `releases/latest` 那类 URL 腐烂)。
|
|
194
|
+
|
|
195
|
+
> **关于包名**
|
|
196
|
+
> 包名是**无 scope** 的 `dsh-deepseek-style-theme`。这是刻意的:`@dsh-external` 这个 scope 在 npm 上属于别人(`wulei1107`,下面挂着 `@dsh-external/dsh-vision-toolkit`),不是本项目的命名空间,也发不进去。
|
|
197
|
+
>
|
|
198
|
+
> **改名的三个引用点必须同时对齐**,缺一个都会静默失效,且失效方式各不相同:
|
|
199
|
+
>
|
|
200
|
+
> | 位置 | 不对齐的后果 |
|
|
201
|
+
> |---|---|
|
|
202
|
+
> | `package.json` 的 `name` | 包装不进去 / 目录名不符 |
|
|
203
|
+
> | `cordis.patch.yml` 的 `name:` | Loader 解析不到模块,**插件装配失败** |
|
|
204
|
+
> | `lib/client.js` 里 `__ModuleLoader__.load` 的 `id` | bundle 加载成功却什么都没注册,**客户端半边失效**(1.43.1 的缺陷) |
|
|
205
|
+
>
|
|
206
|
+
> 自查:`grep '@dsh-external' lib/` 应当**一处都不命中**;命中即漏改(有意保留的兼容位置除外)。
|
|
207
|
+
|
|
208
|
+
### 从本地源码(开发模式,不计入下载量)
|
|
183
209
|
|
|
184
210
|
```bash
|
|
185
211
|
# 源码放哪个稳定目录都行(file: 会把它拷进 profile)
|
|
@@ -188,7 +214,7 @@ dsh plugin --profile web add file:D:\plugins\dsh-deepseek-style-theme
|
|
|
188
214
|
|
|
189
215
|
> 不要 `cd` 进插件源码再执行 `add .`——`.` 会展开成调用目录的绝对路径,落成 `link:`,于是踩中上面的坑。
|
|
190
216
|
|
|
191
|
-
### 从 GitHub
|
|
217
|
+
### 从 GitHub(本仓库,不计入下载量)
|
|
192
218
|
|
|
193
219
|
```bash
|
|
194
220
|
dsh plugin --profile web add github:Lichtspur/deepseek-style-theme
|
|
@@ -198,7 +224,7 @@ dsh plugin --profile web add github:Lichtspur/deepseek-style-theme
|
|
|
198
224
|
|
|
199
225
|
> **代理 / 企业网络**:`github:` 安装要靠 pnpm 调 `git clone`,在带 TLS 中间人证书审计的网络里会以证书错误失败——Windows 上是 `schannel: AcquireCredentialsHandle failed: SEC_E_NO_CREDENTIALS (0x8009030e)`,改用 OpenSSL 后端后变成 `unable to get local issuer certificate (20)`。报错信息只看得到 TLS,很容易误判成插件的问题。这类环境请直接用下面的 **tgz** 或本地目录安装。
|
|
200
226
|
|
|
201
|
-
### 从本地 tgz(推荐用于代理 /
|
|
227
|
+
### 从本地 tgz(推荐用于代理 / 离线环境,不计入下载量)
|
|
202
228
|
|
|
203
229
|
```bash
|
|
204
230
|
dsh plugin --profile web add ./releases/dsh-deepseek-style-theme-1.43.1.tgz
|
|
@@ -208,37 +234,13 @@ dsh plugin --profile web add ./releases/dsh-deepseek-style-theme-1.43.1.tgz
|
|
|
208
234
|
归档文件名由 `package.json` 的 `name` 与 `version` 决定(`pnpm pack` / `npm pack` 均如此),
|
|
209
235
|
因此 1.44.0 起是 `dsh-deepseek-style-theme-<版本>.tgz`。
|
|
210
236
|
|
|
211
|
-
###
|
|
212
|
-
|
|
213
|
-
> ⚠️ **暂时不要用这一条。** npm 上的 `latest` 仍是 **1.43.1**,而那一版带着一个致命缺陷:客户端 bundle 的注册 id 还是旧 scope 的 `@dsh-external/dsh-deepseek-style-theme`,而宿主按包名 `dsh-deepseek-style-theme` 要求它自我注册,于是 **bundle 加载成功却什么都没注册**,主题的整个客户端半边失效。1.43.3 已修复。
|
|
214
|
-
>
|
|
215
|
-
> 在 1.43.3 发到 npm 之前,请用上面的 **tgz 别名地址** 或 `github:` 安装。
|
|
216
|
-
|
|
217
|
-
```bash
|
|
218
|
-
# 修复版发到 npm 之后可用;在那之前用 tgz 别名地址
|
|
219
|
-
dsh plugin --profile web add dsh-deepseek-style-theme
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
> 包名是**无 scope** 的 `dsh-deepseek-style-theme`。这是刻意的:`@dsh-external` 这个 scope 在 npm 上属于别人(`wulei1107`,下面挂着 `@dsh-external/dsh-vision-toolkit`),不是本项目的命名空间,也发不进去。
|
|
223
|
-
>
|
|
224
|
-
> **改名的三个引用点必须同时对齐**,缺一个都会静默失效,且失效方式各不相同:
|
|
225
|
-
>
|
|
226
|
-
> | 位置 | 不对齐的后果 |
|
|
227
|
-
> |---|---|
|
|
228
|
-
> | `package.json` 的 `name` | 包装不进去 / 目录名不符 |
|
|
229
|
-
> | `cordis.patch.yml` 的 `name:` | Loader 解析不到模块,**插件装配失败** |
|
|
230
|
-
> | `lib/client.js` 里 `__ModuleLoader__.load` 的 `id` | bundle 加载成功却什么都没注册,**客户端半边失效**(1.43.1 的缺陷) |
|
|
231
|
-
>
|
|
232
|
-
> 自查:`grep '@dsh-external' lib/` 应当**一处都不命中**;命中即漏改(有意保留的兼容位置除外)。
|
|
233
|
-
>
|
|
234
|
-
> npm 是最省事的安装源:不走 `git clone`(绕开代理/证书问题),也不依赖 GitHub Release 资产(绕开 `releases/latest` 那类 URL 腐烂)。
|
|
237
|
+
### 从任意 Git 仓库(不计入下载量)
|
|
235
238
|
|
|
236
239
|
```bash
|
|
237
|
-
# 或任意 git 仓库地址(若该仓库未提交构建产物,
|
|
238
|
-
# 则需其提供 prepare 脚本并按 pnpm 提示在
|
|
239
|
-
# ~/.dsh/profiles/<name>/pnpm-workspace.yaml 的 allowBuilds 中授权后重跑)
|
|
240
240
|
dsh plugin --profile web add <git-url>
|
|
241
241
|
```
|
|
242
|
+
> 若该仓库未提交构建产物,则需其提供 `prepare` 脚本;按 pnpm 提示在
|
|
243
|
+
> `~/.dsh/profiles/<name>/pnpm-workspace.yaml` 的 `allowBuilds` 中授权后重跑。
|
|
242
244
|
|
|
243
245
|
### 依赖是怎么解析的(排错用)
|
|
244
246
|
|
package/THIRD-PARTY-NOTICES.md
CHANGED
|
@@ -6,9 +6,7 @@ must be preserved in every redistribution.
|
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
## dsh-theme-mineradio — code included
|
|
10
|
-
|
|
11
|
-
`lib/client.js` contains a port of the fluid-shader subsystem and the glass
|
|
9
|
+
## dsh-theme-mineradio — code included`lib/client.js` contains a port of the fluid-shader subsystem and the glass
|
|
12
10
|
dispersion / specular-parallax subsystem of **dsh-theme-mineradio v2.3.8**:
|
|
13
11
|
|
|
14
12
|
- the three GLSL programs (`VERTEX_SHADER`, `FLOW_SHADER`, `DISPLAY_SHADER`) and
|
|
@@ -20,6 +18,16 @@ dispersion / specular-parallax subsystem of **dsh-theme-mineradio v2.3.8**:
|
|
|
20
18
|
`supportsSvgBackdropFilter`),
|
|
21
19
|
- the specular cursor parallax (`startSpecularParallax`).
|
|
22
20
|
|
|
21
|
+
One further technique is **re-expressed, not copied** (v2.0.88): the docked bottom bar,
|
|
22
|
+
in which the composer and its stats line become a single glass slab with the backdrop
|
|
23
|
+
blur on the wrapper's `::before`, the inner surfaces transparent, and one hairline at
|
|
24
|
+
the seam. That structure comes from mineradio's "fused" state
|
|
25
|
+
(`[data-dsh-inputbar]:has([data-dsh-stats])`), including two of its recorded lessons:
|
|
26
|
+
`z-index` rather than `isolation` on the wrapper (isolation is also a backdrop root and
|
|
27
|
+
would clip popup frost to the bar) and `backdrop-filter: none` on the inner surfaces so
|
|
28
|
+
their blur cannot double up with the slab's. The declarations here are written against
|
|
29
|
+
this plugin's own tokens (`--dshome-*`), not mineradio's `--dsh-aqua-*`.
|
|
30
|
+
|
|
23
31
|
Only naming and external dependencies were adapted: plugin-scoped identifiers
|
|
24
32
|
were renamed to this plugin's `dshome-` prefix, and the upstream settings/theme
|
|
25
33
|
store and React layer were replaced by function parameters. **The GLSL shader
|
package/lib/client.js
CHANGED
|
@@ -1506,18 +1506,46 @@ body[data-dshome-dark] :is([class*="_headline"]){background:linear-gradient(120d
|
|
|
1506
1506
|
:is(${USER_BUBBLE}){background:rgba(255,255,255,.6)!important;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border:1px solid rgba(0,0,0,.05);box-shadow:0 4px 16px rgba(13,30,60,.06)}
|
|
1507
1507
|
body[data-dshome-dark] :is(${USER_BUBBLE}){background:rgba(21,42,86,.65)!important;border:1px solid rgba(255,255,255,.1);box-shadow:0 4px 16px rgba(0,0,0,.25)}
|
|
1508
1508
|
` },
|
|
1509
|
-
// The line under the composer
|
|
1510
|
-
//
|
|
1511
|
-
//
|
|
1512
|
-
//
|
|
1513
|
-
//
|
|
1514
|
-
//
|
|
1515
|
-
//
|
|
1516
|
-
//
|
|
1509
|
+
// The line under the composer: round/step/token stats ([data-dsh-stats]) and
|
|
1510
|
+
// the whole input bar ([data-dsh-inputbar]) -- both product markup that has
|
|
1511
|
+
// never been renamed.
|
|
1512
|
+
//
|
|
1513
|
+
// Two things happen here.
|
|
1514
|
+
//
|
|
1515
|
+
// 1. The DOCKED BOTTOM BAR, borrowed from dsh-theme-mineradio's fused state
|
|
1516
|
+
// (MIT, @dhicoc): once the stats line exists, the WHOLE input bar becomes
|
|
1517
|
+
// one glass slab -- a single border, radius, fill and shadow on the
|
|
1518
|
+
// wrapper, with the backdrop blur on its ::before -- and the card and the
|
|
1519
|
+
// stats turn transparent inside it, leaving one hairline at the seam. The
|
|
1520
|
+
// two surfaces can then never drift apart tonally, and the composer reads
|
|
1521
|
+
// as one designed bar instead of a card with loose text under it.
|
|
1522
|
+
// `:has()` is what makes this safe to attempt at all: when the product
|
|
1523
|
+
// does not render a stats line, none of it applies and the card keeps its
|
|
1524
|
+
// own glass.
|
|
1525
|
+
// Two details are load-bearing and inherited from mineradio's notes:
|
|
1526
|
+
// z-index (not isolation) on the wrapper -- isolation is also a backdrop
|
|
1527
|
+
// root and would clip popup frost to the bar -- and `backdrop-filter:
|
|
1528
|
+
// none` on the inner surfaces, whose own blur would otherwise double up
|
|
1529
|
+
// with the slab's.
|
|
1530
|
+
//
|
|
1531
|
+
// 2. The LENS touch the user asked for ("对对话窗下方文字进行放大(模拟液体放大)"):
|
|
1532
|
+
// a real lens magnifies what is behind the glass, which a backdrop filter
|
|
1533
|
+
// cannot do, so the text is scaled a touch instead -- and a touch further
|
|
1534
|
+
// while the pane leans (html[data-dshome-leaning], written by
|
|
1535
|
+
// startComposerTilt). `transform-origin: left center` keeps a
|
|
1536
|
+
// left-aligned line growing inwards instead of spilling past the slab's
|
|
1537
|
+
// right edge.
|
|
1517
1538
|
{ anchor: "[data-dsh-stats]", css: `
|
|
1518
|
-
[data-dsh-stats]{
|
|
1519
|
-
|
|
1520
|
-
|
|
1539
|
+
[data-dsh-inputbar]:has([data-dsh-stats]){position:relative;z-index:8;padding:0;border:1.5px solid rgba(255,255,255,.55);border-radius:24px;background:rgba(255,255,255,.42);box-shadow:0 8px 32px rgba(13,30,60,.1),inset 0 1px 1px hsla(0,0%,100%,.8)}
|
|
1540
|
+
[data-dsh-inputbar]:has([data-dsh-stats])::before{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:-1;-webkit-backdrop-filter:blur(28px) saturate(1.42) brightness(1.02);backdrop-filter:blur(28px) saturate(1.42) brightness(1.02)}
|
|
1541
|
+
[data-dsh-inputbar]:has([data-dsh-stats]) [data-composer-card]{border:none!important;border-radius:0!important;background:transparent!important;background-image:none!important;box-shadow:none!important;-webkit-backdrop-filter:none!important;backdrop-filter:none!important}
|
|
1542
|
+
[data-dsh-inputbar]:has([data-dsh-stats]) [data-composer-card]::before,[data-dsh-inputbar]:has([data-dsh-stats]) [data-composer-card]::after{display:none!important}
|
|
1543
|
+
[data-dsh-inputbar]:has([data-dsh-stats]) [data-dsh-stats]{display:block;width:100%;max-width:none;box-sizing:border-box;margin:auto 0 0;min-height:24px;padding:2px 16px;border:none;border-top:1px solid rgba(0,0,0,.06);border-radius:0;background:transparent;box-shadow:none;-webkit-backdrop-filter:none;backdrop-filter:none;transform-origin:left center;transition:transform .24s cubic-bezier(.2,.8,.2,1)}
|
|
1544
|
+
[data-dsh-stats]{transform:scale(1.04)}
|
|
1545
|
+
html[data-dshome-leaning] [data-dsh-inputbar]:has([data-dsh-stats]) [data-dsh-stats]{transform:scale(1.08)}
|
|
1546
|
+
body[data-dshome-dark] [data-dsh-inputbar]:has([data-dsh-stats]){border-color:rgba(255,255,255,.16);background:rgba(13,30,60,.55);box-shadow:0 10px 40px rgba(0,0,0,.35),inset 0 1px 1px rgba(255,255,255,.06)}
|
|
1547
|
+
body[data-dshome-dark] [data-dsh-inputbar]:has([data-dsh-stats]) [data-dsh-stats]{border-top-color:rgba(255,255,255,.1)}
|
|
1548
|
+
@media (prefers-reduced-motion:reduce){[data-dsh-inputbar]:has([data-dsh-stats]) [data-dsh-stats]{transition:none}}
|
|
1521
1549
|
` },
|
|
1522
1550
|
// Trajectory view bar.
|
|
1523
1551
|
{ anchor: ".fV0t5q_root", css: `
|
|
@@ -2693,7 +2721,7 @@ html[data-dshome-blur="off"] body{
|
|
|
2693
2721
|
if (!supportsWebgl2()) return startParticles();
|
|
2694
2722
|
// Which build is running, readable from the page (see README). One line in
|
|
2695
2723
|
// the console answers "is the bundle I just installed actually live?".
|
|
2696
|
-
try { window.__dshomeBuild = '2.0.
|
|
2724
|
+
try { window.__dshomeBuild = '2.0.89 rc2-verified'; } catch (error) {}
|
|
2697
2725
|
const canvas = document.createElement('canvas');
|
|
2698
2726
|
canvas.setAttribute('data-dsh-deepseek-canvas', '');
|
|
2699
2727
|
const style = canvas.style;
|
|
@@ -2884,7 +2912,7 @@ html[data-dshome-blur="off"] body{
|
|
|
2884
2912
|
}
|
|
2885
2913
|
|
|
2886
2914
|
function startParticles() {
|
|
2887
|
-
try { window.__dshomeBuild = '2.0.
|
|
2915
|
+
try { window.__dshomeBuild = '2.0.89 rc2-verified'; } catch (error) {}
|
|
2888
2916
|
const canvas = document.createElement('canvas');
|
|
2889
2917
|
canvas.setAttribute('data-dsh-deepseek-canvas', '');
|
|
2890
2918
|
const style = canvas.style;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-deepseek-style-theme",
|
|
3
3
|
"description": "DeepSeek official-home style theme: WebGL fluid-flow background, liquid glass with SVG edge refraction, glass sidebar and composer, frosted header, running-subagent progress panel, and DeepSeek brand link for the dsh web GUI",
|
|
4
|
-
"version": "2.0.
|
|
4
|
+
"version": "2.0.89",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"deepseek",
|