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 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
- ### 从 npm
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
 
@@ -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 (round/step/token stats, `[data-dsh-stats]` is
1510
- // product markup that has never been renamed) gets the LENS touch the user
1511
- // asked for: "模糊效果,你对对话窗下方文字进行放大(模拟液体放大)". A real lens
1512
- // magnifies what is behind the glass, which a backdrop filter cannot do --
1513
- // but the pane is directly above this line, so scaling it a touch reads as
1514
- // the pane's magnification, and scaling it further while the pane leans
1515
- // (html[data-dshome-leaning], written by startComposerTilt) ties the motion
1516
- // to the hover. Small on purpose: 6% is a lens hint, 12% while leaning.
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]{transform:scale(1.06);transform-origin:center center;transition:transform .24s cubic-bezier(.2,.8,.2,1)}
1519
- html[data-dshome-leaning] [data-dsh-stats]{transform:scale(1.12)}
1520
- @media (prefers-reduced-motion:reduce){[data-dsh-stats]{transition:none}}
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.87 lens-blur'; } catch (error) {}
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.87 lens-blur'; } catch (error) {}
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.87",
4
+ "version": "2.0.89",
5
5
  "type": "module",
6
6
  "keywords": [
7
7
  "deepseek",