@nonamelego/dsh-catppuccin 0.5.9 → 0.5.10-beta.0
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 +53 -102
- package/README.md +47 -110
- package/icon.png +0 -0
- package/lib/client.js +21 -5
- package/lib/client.js.map +1 -1
- package/lib/index.js +56 -35
- package/lib/index.js.map +1 -1
- package/package.json +3 -1
package/README.en.md
CHANGED
|
@@ -125,22 +125,29 @@ dsh plugin --profile web add @nonamelego/dsh-catppuccin
|
|
|
125
125
|
Restart `dsh web` after installing — `dsh plugin` adds it to the profile's bundles.
|
|
126
126
|
Use the profile name of your choice in place of `web` (e.g. `headless`).
|
|
127
127
|
|
|
128
|
-
**Desktop**: the desktop
|
|
129
|
-
|
|
128
|
+
**Desktop**: the official desktop shell and the community desktop shell both read the **same profile**
|
|
129
|
+
`$DSH_HOME/profiles/desktop`, but **they install/upgrade plugins in completely different, non-interchangeable
|
|
130
|
+
ways** — pick the column that matches your shell:
|
|
130
131
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
132
|
+
| | Official desktop shell ([DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) app) | Community shell ([DSH Desktop](https://github.com/anywhere-labs/dsh-desktop)) |
|
|
133
|
+
|---|---|---|
|
|
134
|
+
| **Install** | Its **plugin UI** → add plugin → enter the package name `@nonamelego/dsh-catppuccin` (Git URLs / tarballs / local paths are accepted too) | In the app's own **DSH terminal**:<br>`dsh plugin --profile desktop add @nonamelego/dsh-catppuccin` |
|
|
135
|
+
| **Upgrade** | **Remove the plugin in the plugin UI, then enter the same package name again to reinstall it** (v0.2.0 has no upgrade entry point and no version picker) | The same `update` command as web:<br>`dsh plugin --profile desktop update @nonamelego/dsh-catppuccin` |
|
|
136
|
+
| Runs pnpm | The app's bundled pnpm | The app's bundled pnpm |
|
|
137
|
+
|
|
138
|
+
Either way, **restart the desktop app** to load the new version.
|
|
134
139
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
140
|
+
> ⚠️ **Do not mix the columns**: the official shell's plugin UI does not run commands, and the community
|
|
141
|
+
> shell's `update` command does not apply to the official shell. Also, **the plain `dsh` on your system PATH
|
|
142
|
+
> cannot manage `desktop` in either shell** — upstream reserves that profile name and rejects it with
|
|
143
|
+
> `error: profile "desktop" is managed exclusively by the Electron application`. To use the CLI, use another
|
|
144
|
+
> profile name (`web`, `headless`, `dsh-tui`).
|
|
138
145
|
|
|
139
146
|
> **Two desktop shells, one profile**: the official
|
|
140
147
|
> [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) monorepo ships
|
|
141
|
-
> `apps/desktop` / `apps/desktop-host` (Electron
|
|
142
|
-
> [DSH Desktop](https://github.com/anywhere-labs/
|
|
143
|
-
> `$DSH_HOME/profiles/desktop`, so
|
|
148
|
+
> `apps/desktop` / `apps/desktop-host` (Electron), and the community
|
|
149
|
+
> [DSH Desktop](https://github.com/anywhere-labs/dsh-desktop) does the same — both boot
|
|
150
|
+
> `$DSH_HOME/profiles/desktop`, so a plugin installed once works in either. This plugin's desktop support
|
|
144
151
|
> targets the **official web + desktop** builds; the community shell's `desktopProfiles` service probe
|
|
145
152
|
> is kept. The official shell's profile process carries **no** dedicated env marker (its
|
|
146
153
|
> `DSH_DESKTOP_NODE_EXECUTABLE` is injected only into its package-install children), so the plugin
|
|
@@ -157,6 +164,10 @@ dsh plugin --profile web add https://github.com/NoNameLeGo/dsh-catppuccin-theme
|
|
|
157
164
|
When installing from git, pnpm may ask you to allow build scripts — follow pnpm's prompt
|
|
158
165
|
and add the package to the profile's `pnpm-workspace.yaml` `allowBuilds`, then run it again.
|
|
159
166
|
|
|
167
|
+
On desktop, follow the table above instead: the **official shell** takes the Git URL directly in its
|
|
168
|
+
plugin UI, while the **community shell** runs the same command with
|
|
169
|
+
`dsh plugin --profile desktop add …`.
|
|
170
|
+
|
|
160
171
|
### dsh-TUI (terminal) themes
|
|
161
172
|
|
|
162
173
|
The same package covers the TUI. Install it into the dsh-tui profile:
|
|
@@ -246,6 +257,12 @@ In **Settings → General**, right below the **Glass** row:
|
|
|
246
257
|
- Channel policy: stable builds follow the `latest` tag; prereleases follow both `latest`
|
|
247
258
|
and `beta` (the upgrade command automatically carries `@beta`). Offline or network
|
|
248
259
|
failures show the reason and offer a retry.
|
|
260
|
+
- The upgrade path follows the **host**: the **official desktop build** (DeepSeek Harness
|
|
261
|
+
client) gets no command line — it has no reachable terminal — so this row shows the
|
|
262
|
+
**`package@channel`** spec and tells you to delete the plugin on the **Plugins** page and
|
|
263
|
+
reinstall it (the same path as the desktop section above). The **community desktop shell**
|
|
264
|
+
and **web** keep the copyable `dsh plugin …` command. The host classifies itself
|
|
265
|
+
(`web` / `community-desktop` / `official-desktop`); you do not pick.
|
|
249
266
|
|
|
250
267
|
## Glassmorphism
|
|
251
268
|
|
|
@@ -269,7 +286,7 @@ What this plugin does:
|
|
|
269
286
|
- **One-click toggle**: off restores the stock UI exactly; uninstalling the plugin leaves
|
|
270
287
|
nothing behind.
|
|
271
288
|
|
|
272
|
-
###
|
|
289
|
+
### When Compatibility mode matches the wrong surface
|
|
273
290
|
|
|
274
291
|
Compatibility mode frosts host and third-party floating surfaces through **class substrings and
|
|
275
292
|
semantic attributes**, needing no cooperation from other plugins — the price is that a substring
|
|
@@ -278,54 +295,19 @@ matches are exactly these:
|
|
|
278
295
|
|
|
279
296
|
| Family | Anchor |
|
|
280
297
|
|---|---|
|
|
281
|
-
| Composer card | `[data-composer-card]` (the
|
|
298
|
+
| Composer card | `[data-composer-card]` (the material is painted on its `::before`, see issue #19) |
|
|
282
299
|
| Menus | `[role='menu']` |
|
|
283
300
|
| Popovers | `[class*='popover']` / `[class*='dropdown']` (still substrings) |
|
|
284
301
|
| Modal dialogs | `[role='dialog'][aria-modal='true']` |
|
|
285
302
|
| Host right sidebar (open state only) | `[data-sidebar-right-panel][data-sidebar-right-open]` |
|
|
286
303
|
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
```js
|
|
295
|
-
(() => {
|
|
296
|
-
const rules = []
|
|
297
|
-
for (const ss of document.styleSheets) {
|
|
298
|
-
let rs; try { rs = ss.cssRules } catch { continue }
|
|
299
|
-
for (const r of rs) if (r.selectorText && r.selectorText.includes('dsh-glass')) rules.push(r)
|
|
300
|
-
}
|
|
301
|
-
const out = []
|
|
302
|
-
for (const el of document.querySelectorAll('[class*="card"],[class*="panel"],[role="tooltip"]')) {
|
|
303
|
-
const hit = rules.filter(r => { try { return el.matches(r.selectorText) } catch { return false } })
|
|
304
|
-
if (!hit.length) continue
|
|
305
|
-
const cs = getComputedStyle(el), b = el.getBoundingClientRect()
|
|
306
|
-
if (b.width < 8 || b.height < 8) continue
|
|
307
|
-
out.push({ cls: String(el.className).slice(0, 48), w: Math.round(b.width), h: Math.round(b.height),
|
|
308
|
-
bf: cs.backdropFilter, bg: cs.backgroundColor,
|
|
309
|
-
rule: hit.map(x => x.style.cssText).join(' | ').slice(0, 60) })
|
|
310
|
-
}
|
|
311
|
-
console.table(out.slice(0, 40))
|
|
312
|
-
})()
|
|
313
|
-
```
|
|
314
|
-
|
|
315
|
-
**2. Stop the bleeding locally.** The plugin has **no** "custom CSS" option (DSH's profile patch
|
|
316
|
-
layer can only write plugin `config` — there is no generic style entry point), so this needs an
|
|
317
|
-
external injector: a browser extension (Stylus / Violentmonkey) or DevTools Overrides with an
|
|
318
|
-
`!important` rule, e.g.
|
|
319
|
-
|
|
320
|
-
```css
|
|
321
|
-
[class*='yourRow'] { backdrop-filter: none !important; background: none !important; outline: none !important; }
|
|
322
|
-
```
|
|
323
|
-
|
|
324
|
-
**3. Report it.** Paste step 1's output plus your DSH and plugin versions into
|
|
325
|
-
[issues](https://github.com/NoNameLeGo/dsh-catppuccin-theme/issues). That is how `0.5.8` was built:
|
|
326
|
-
the reporter supplied per-element computed values and we narrowed the **defaults** — which is also
|
|
327
|
-
why there is no "custom CSS" option: the default should be right first, an escape hatch is only a
|
|
328
|
-
supplement.
|
|
304
|
+
**A new class name in a third-party plugin can still be misread.** When you hit one, work through three
|
|
305
|
+
steps: **① collect evidence** (a probe snippet you paste into the console, listing every matched element
|
|
306
|
+
and rule) → **② temporary relief** (inject an `!important` override from outside; this plugin
|
|
307
|
+
deliberately ships **no** "custom CSS" option) → **③ report** (attach the evidence plus your DSH and
|
|
308
|
+
plugin versions to [issues](https://github.com/NoNameLeGo/dsh-catppuccin-theme/issues)).
|
|
309
|
+
The full write-up, the probe snippet and the history (#16 / #17 / #19) live in
|
|
310
|
+
[docs/glass-mis-hits.md](docs/glass-mis-hits.md).
|
|
329
311
|
|
|
330
312
|
### Environment limit: glass needs a see-through base from the host
|
|
331
313
|
|
|
@@ -393,53 +375,18 @@ The machine-readable form of the above is `dsh.compatibility` (`dsh` / `dshRelea
|
|
|
393
375
|
## Development
|
|
394
376
|
|
|
395
377
|
```sh
|
|
396
|
-
pnpm install
|
|
397
|
-
pnpm typecheck
|
|
398
|
-
pnpm typecheck:tests
|
|
399
|
-
pnpm test
|
|
400
|
-
pnpm build
|
|
401
|
-
```
|
|
402
|
-
|
|
403
|
-
Palettes are produced by a generator script — after editing
|
|
404
|
-
`scripts/generate-palettes.mjs`, rerun:
|
|
405
|
-
|
|
406
|
-
```sh
|
|
407
|
-
node scripts/generate-palettes.mjs
|
|
408
|
-
```
|
|
409
|
-
|
|
410
|
-
The changelog draft is generated from your conventional commits (bilingual `EN:` support
|
|
411
|
-
in commit bodies):
|
|
412
|
-
|
|
413
|
-
```sh
|
|
414
|
-
pnpm changelog:gen # print the draft since the last tag
|
|
415
|
-
pnpm changelog:gen -- --write # write it into the [Unreleased] section
|
|
416
|
-
```
|
|
417
|
-
|
|
418
|
-
TypeDoc docs for the public API (`./client`, `./tui-themes` subpath exports) are generated
|
|
419
|
-
locally on demand into `docs/api/` (that directory is **not** committed — it's in
|
|
420
|
-
`.gitignore`; wire up CI Pages publishing later if an online copy is ever wanted):
|
|
421
|
-
|
|
422
|
-
```sh
|
|
423
|
-
pnpm docs:api
|
|
424
|
-
```
|
|
425
|
-
|
|
426
|
-
See [CONTRIBUTING.md](CONTRIBUTING.md) for the contribution guide and
|
|
427
|
-
[docs/state-migrations.md](docs/state-migrations.md) for the state versioning contract.
|
|
428
|
-
|
|
429
|
-
### Local link debugging
|
|
430
|
-
|
|
431
|
-
Clone the repo, link it into a profile and add it to the bundles (use your own paths;
|
|
432
|
-
`$DSH_HOME` defaults to `~/.dsh`):
|
|
433
|
-
|
|
434
|
-
```sh
|
|
435
|
-
pnpm --dir ~/.dsh/profiles/web add link:/path/to/dsh-catppuccin
|
|
436
|
-
# Windows example:
|
|
437
|
-
# pnpm --dir C:\Users\<you>\.dsh\profiles\web add link:D:\dev\dsh-catppuccin
|
|
378
|
+
pnpm install # install dependencies
|
|
379
|
+
pnpm typecheck # tsc --noEmit for src
|
|
380
|
+
pnpm typecheck:tests # tsc --noEmit for tests
|
|
381
|
+
pnpm test # vitest
|
|
382
|
+
pnpm build # tsdown -> lib/index.js (host) + lib/client.js (browser)
|
|
438
383
|
```
|
|
439
384
|
|
|
440
|
-
|
|
441
|
-
`
|
|
442
|
-
|
|
385
|
+
The palette table is generated by `scripts/generate-palettes.mjs` — **never hand-edit**
|
|
386
|
+
`src/client/palettes.ts`; CHANGELOG drafts come from `pnpm changelog:gen`.
|
|
387
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for the full command list, the generators, typedoc and local
|
|
388
|
+
link debugging; state-contract migration rules are in
|
|
389
|
+
[docs/state-migrations.md](docs/state-migrations.md).
|
|
443
390
|
|
|
444
391
|
## 🙋 FAQ
|
|
445
392
|
|
|
@@ -459,8 +406,12 @@ Then add `@nonamelego/dsh-catppuccin` to the profile's `package.json`
|
|
|
459
406
|
A: Settings → General → **Check Catppuccin plugin updates** compares against npm in one
|
|
460
407
|
click and gives a copyable upgrade command; or run
|
|
461
408
|
`dsh plugin --profile web update @nonamelego/dsh-catppuccin` manually (re-`add` the
|
|
462
|
-
latest version works too).
|
|
463
|
-
|
|
409
|
+
latest version works too). **Desktop depends on which shell you use**: the community
|
|
410
|
+
[DSH Desktop](https://github.com/anywhere-labs/dsh-desktop) runs that same command in the app's own
|
|
411
|
+
DSH terminal (with `desktop` as the profile name), while the **official shell has no upgrade entry
|
|
412
|
+
point** — **remove the plugin in its plugin UI, then enter the package name
|
|
413
|
+
`@nonamelego/dsh-catppuccin` again to reinstall**, and restart the app. The two routes are not
|
|
414
|
+
interchangeable; see the table under Install → Desktop.
|
|
464
415
|
|
|
465
416
|
## 💝 Credits
|
|
466
417
|
|
package/README.md
CHANGED
|
@@ -117,25 +117,27 @@ dsh plugin --profile web add @nonamelego/dsh-catppuccin
|
|
|
117
117
|
装完重启 `dsh web` 即可,`dsh plugin` 会自动把它加进 profile 的 bundles。
|
|
118
118
|
其他 profile 把命令里的 `web` 换成对应名字即可(如 `headless`)。
|
|
119
119
|
|
|
120
|
-
|
|
121
|
-
|
|
120
|
+
**桌面版**:官方桌面壳与社区桌面壳都读**同一个 profile** `$DSH_HOME/profiles/desktop`,但
|
|
121
|
+
**两者装/升插件的方式完全不同、也不通用**——按你用的壳选一列:
|
|
122
122
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
123
|
+
| | 官方桌面壳([DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) 客户端) | 社区桌面壳([DSH Desktop](https://github.com/anywhere-labs/dsh-desktop)) |
|
|
124
|
+
|---|---|---|
|
|
125
|
+
| **安装** | 应用内的**插件界面** → 添加插件 → 填包名 `@nonamelego/dsh-catppuccin`(也接受 Git 地址 / 压缩包 / 本地路径) | 在打开的 **终端**里执行命令:<br>`dsh plugin --profile desktop add @nonamelego/dsh-catppuccin` |
|
|
126
|
+
| **升级** | **先在插件界面里把插件删除,再重新填一遍同一个包名安装**(v0.2.0 没有升级入口,也没有版本选择器) | 与 web 类似的更新命令:<br>`dsh plugin --profile desktop update @nonamelego/dsh-catppuccin` |
|
|
127
|
+
| 谁执行 pnpm | 应用自带的 pnpm | 应用自带的 pnpm |
|
|
126
128
|
|
|
127
|
-
|
|
128
|
-
若在托盘里选了别的 profile 就换成那个名字),装完**重启桌面应用**生效。
|
|
129
|
-
从仓库安装的方式同理:`dsh plugin --profile desktop add https://github.com/NoNameLeGo/dsh-catppuccin-theme`。
|
|
129
|
+
两种方式改完都要**重启桌面应用**才会加载新版本。
|
|
130
130
|
|
|
131
|
-
>
|
|
132
|
-
>
|
|
133
|
-
>
|
|
134
|
-
>
|
|
131
|
+
> ⚠️ **两列别混用**:官方壳的插件界面不执行命令;社区壳那条 `update` 命令对官方壳也不适用。
|
|
132
|
+
> 另外,**系统 PATH 上那个普通 `dsh` 两个壳都管不了 `desktop`**——上游把 `desktop` 当自己保留的
|
|
133
|
+
> profile,会直接报 `error: profile "desktop" is managed exclusively by the Electron application`。
|
|
134
|
+
> 想用 CLI 管就用别的 profile 名(`web`、`headless`、`dsh-tui`)。
|
|
135
|
+
|
|
136
|
+
> 本插件的桌面支持以
|
|
135
137
|
> **官方 web + 官方 desktop** 为维护核心;社区壳的 `desktopProfiles` 服务探测也保留。
|
|
136
138
|
> 但官方壳的 profile 进程**没有**专用的环境标记(它的 `DSH_DESKTOP_NODE_EXECUTABLE` 只注入给
|
|
137
139
|
> 包安装子进程),所以本插件改为识别 **Electron-as-node 运行时**(`process.versions.electron`)
|
|
138
|
-
>
|
|
140
|
+
> 来判定官方桌面版;设置的读写不受影响。
|
|
139
141
|
|
|
140
142
|
### 方式二:从仓库安装
|
|
141
143
|
|
|
@@ -146,6 +148,9 @@ dsh plugin --profile web add https://github.com/NoNameLeGo/dsh-catppuccin-theme
|
|
|
146
148
|
从 git 安装时 pnpm 可能要求允许构建脚本——按 pnpm 的提示把对应包加进 profile
|
|
147
149
|
`pnpm-workspace.yaml` 的 `allowBuilds` 后重跑一次即可。
|
|
148
150
|
|
|
151
|
+
桌面版同理,但按上面的表走:**官方壳**在插件界面里直接填 Git 地址;**社区壳**把这条命令的
|
|
152
|
+
`dsh plugin --profile web add …` 换成 `dsh plugin --profile desktop add …`。
|
|
153
|
+
|
|
149
154
|
### dsh-TUI(终端版)主题
|
|
150
155
|
|
|
151
156
|
与 Web GUI 插件同一个包。用标准的插件安装命令装进 dsh-tui profile:
|
|
@@ -175,7 +180,7 @@ dsh plugin --profile dsh-tui add https://github.com/NoNameLeGo/dsh-catppuccin-th
|
|
|
175
180
|
|
|
176
181
|
## 使用
|
|
177
182
|
|
|
178
|
-
1. 打开 Web GUI(默认 `http://127.0.0.1:3080`);在 [DSH Desktop](https://github.com/anywhere-labs/
|
|
183
|
+
1. 打开 Web GUI(默认 `http://127.0.0.1:3080`);在 [DSH Desktop](https://github.com/anywhere-labs/dsh-desktop) 中则直接打开桌面应用即可。
|
|
179
184
|
2. 进入 **设置 → 常规**。
|
|
180
185
|
3. 在 **外观** 区域下方找到 **Catppuccin** 行,选择主题:
|
|
181
186
|
**Latte**(浅色)、**Frappé**、**Macchiato** 或 **Mocha**(深色)。
|
|
@@ -224,6 +229,11 @@ dsh plugin --profile dsh-tui add https://github.com/NoNameLeGo/dsh-catppuccin-th
|
|
|
224
229
|
命令,会提示改用 `git pull` 或重新构建。
|
|
225
230
|
- 通道策略:正式版只跟随 `latest` 标签;预发布版同时跟随 `beta`(升级命令
|
|
226
231
|
自动带 `@beta`)。离线或网络失败时显示原因并可重试。
|
|
232
|
+
- 升级路径按**宿主**分流:**官方桌面版**(DeepSeek Harness 客户端)不给命令行——
|
|
233
|
+
它没有可达的终端入口,所以这一行改为给出 **`包名@渠道`** 并提示在
|
|
234
|
+
**插件界面**里先删除、再重新安装(与上面「桌面版」段的升级路径一致);
|
|
235
|
+
**社区桌面壳**与 **web** 仍照常给出可复制的 `dsh plugin …` 命令。
|
|
236
|
+
判定由宿主完成(`web` / `community-desktop` / `official-desktop`),无需你选。
|
|
227
237
|
|
|
228
238
|
## 玻璃拟态(Glassmorphism)
|
|
229
239
|
|
|
@@ -244,65 +254,24 @@ dsh plugin --profile dsh-tui add https://github.com/NoNameLeGo/dsh-catppuccin-th
|
|
|
244
254
|
变色;页面底色取当前主题纯色,背景亮度旋钮直接往纯色里调和白/黑;
|
|
245
255
|
- **一键开关**:关闭即完全还原原生界面,插件卸载不留任何残留。
|
|
246
256
|
|
|
247
|
-
###
|
|
257
|
+
### 兼容模式误命中了别的面?
|
|
248
258
|
|
|
249
|
-
|
|
259
|
+
兼容模式靠**类名子串与语义属性**给宿主与第三方插件的悬浮面加玻璃,不需要插件配合——
|
|
250
260
|
代价是子串匹配**无法区分「面」与「面里的行级容器」**。自 `0.5.8` 起,明确会被命中的族只剩这些:
|
|
251
261
|
|
|
252
262
|
| 族 | 锚点 |
|
|
253
263
|
|---|---|
|
|
254
|
-
| 输入框卡片 | `[data-composer-card]
|
|
264
|
+
| 输入框卡片 | `[data-composer-card]`(材质画在它的 `::before` 上,见 issue #19) |
|
|
255
265
|
| 菜单 | `[role='menu']` |
|
|
256
|
-
| 弹出层 | `[class*='popover']` / `[class*='dropdown']
|
|
266
|
+
| 弹出层 | `[class*='popover']` / `[class*='dropdown']`(仍是子串) |
|
|
257
267
|
| 模态框 | `[role='dialog'][aria-modal='true']` |
|
|
258
268
|
| 宿主右侧栏(仅展开态) | `[data-sidebar-right-panel][data-sidebar-right-open]` |
|
|
259
269
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
列出当前所有被玻璃规则命中的元素、命中的规则原文与 computed 值:
|
|
266
|
-
|
|
267
|
-
```js
|
|
268
|
-
(() => {
|
|
269
|
-
const rules = []
|
|
270
|
-
for (const ss of document.styleSheets) {
|
|
271
|
-
let rs; try { rs = ss.cssRules } catch { continue }
|
|
272
|
-
for (const r of rs) if (r.selectorText && r.selectorText.includes('dsh-glass')) rules.push(r)
|
|
273
|
-
}
|
|
274
|
-
const out = []
|
|
275
|
-
for (const el of document.querySelectorAll('[class*="card"],[class*="panel"],[role="tooltip"]')) {
|
|
276
|
-
const hit = rules.filter(r => { try { return el.matches(r.selectorText) } catch { return false } })
|
|
277
|
-
if (!hit.length) continue
|
|
278
|
-
const cs = getComputedStyle(el), b = el.getBoundingClientRect()
|
|
279
|
-
if (b.width < 8 || b.height < 8) continue
|
|
280
|
-
out.push({ cls: String(el.className).slice(0, 48), w: Math.round(b.width), h: Math.round(b.height),
|
|
281
|
-
bf: cs.backdropFilter, bg: cs.backgroundColor,
|
|
282
|
-
rule: hit.map(x => x.style.cssText).join(' | ').slice(0, 60) })
|
|
283
|
-
}
|
|
284
|
-
console.table(out.slice(0, 40))
|
|
285
|
-
})()
|
|
286
|
-
```
|
|
287
|
-
|
|
288
|
-
#### 2. 临时止血
|
|
289
|
-
|
|
290
|
-
本插件**没有**「自定义 CSS」配置项(DSH 的 profile patch 层只能给插件写 `config`,没有通用样式入口;
|
|
291
|
-
但**个别第三方插件自带样式入口**,例如 `dsh-better-sidebar@0.21.1` 的 `customCss`——它 gate 在自身的
|
|
292
|
-
`titleBarScheme: 'custom'` 上、以 `data-dsh-custom-css` 注入,装了这类插件时也可以直接写在它的 `config` 里),
|
|
293
|
-
所以这一步要用外部注入——浏览器扩展(Stylus / 暴力猴)或 DevTools 的 Overrides——加一条
|
|
294
|
-
`!important` 规则把该族还原,例如:
|
|
295
|
-
|
|
296
|
-
```css
|
|
297
|
-
[class*='yourRow'] { backdrop-filter: none !important; background: none !important; outline: none !important; }
|
|
298
|
-
```
|
|
299
|
-
|
|
300
|
-
#### 3. 反馈
|
|
301
|
-
|
|
302
|
-
把第 1 步的表格输出连同 DSH 与插件版本贴到
|
|
303
|
-
[issues](https://github.com/NoNameLeGo/dsh-catppuccin-theme/issues)。`0.5.8` 就是这么修出来的:
|
|
304
|
-
报告人给了逐元素的 computed 对照,我们据此收窄**默认**规则——这也是为什么没有「自定义 CSS」
|
|
305
|
-
配置项:默认行为应该先是对的,配置项只能当补充。
|
|
270
|
+
**第三方插件里新出现的类名仍可能被误命中**。遇到时走三步:**① 只读取证**(一段粘进控制台的探针脚本,
|
|
271
|
+
列出命中的元素与规则)→ **② 临时止血**(外部注入一条 `!important` 还原;本插件**不**提供
|
|
272
|
+
「自定义 CSS」配置项)→ **③ 反馈**(把取证输出连同 DSH 与插件版本提到
|
|
273
|
+
[issues](https://github.com/NoNameLeGo/dsh-catppuccin-theme/issues))。
|
|
274
|
+
三步的完整说明、探针脚本与历史(#16 / #17 / #19)见 [docs/glass-mis-hits.md](docs/glass-mis-hits.md)。
|
|
306
275
|
|
|
307
276
|
### 环境限制:玻璃需要宿主提供可透出的底色
|
|
308
277
|
|
|
@@ -364,51 +333,17 @@ alias 101 / specific 11 / 非三族 1)全覆盖,含 0.2.0 新增的 17 个 a
|
|
|
364
333
|
## 开发
|
|
365
334
|
|
|
366
335
|
```sh
|
|
367
|
-
pnpm install
|
|
368
|
-
pnpm typecheck
|
|
369
|
-
pnpm typecheck:tests
|
|
370
|
-
pnpm test
|
|
371
|
-
pnpm build
|
|
372
|
-
```
|
|
373
|
-
|
|
374
|
-
配色表由生成器脚本产出——修改 `scripts/generate-palettes.mjs` 后重跑
|
|
375
|
-
(`--pin <sha>` 可把上游 commit SHA 写进 `palettes.ts` 头部,见
|
|
376
|
-
`docs/plugin-improvements.md` 的 L 项):
|
|
377
|
-
|
|
378
|
-
```sh
|
|
379
|
-
node scripts/generate-palettes.mjs [--pin <upstream-sha>]
|
|
380
|
-
```
|
|
381
|
-
|
|
382
|
-
CHANGELOG 草稿由 conventional 提交生成(提交正文里的 `EN:` 行会被渲染成英文摘要):
|
|
383
|
-
|
|
384
|
-
```sh
|
|
385
|
-
pnpm changelog:gen # 打印上一 tag 之后的草稿
|
|
386
|
-
pnpm changelog:gen -- --write # 直接写入 [Unreleased] 节
|
|
387
|
-
```
|
|
388
|
-
|
|
389
|
-
对外 API(`./client`、`./tui-themes` 子路径导出)的 typedoc 文档**按需本地生成**到
|
|
390
|
-
`docs/api/`(该目录不入库、已进 `.gitignore`;哪天真需要在线版本再接 CI 发布):
|
|
391
|
-
|
|
392
|
-
```sh
|
|
393
|
-
pnpm docs:api
|
|
394
|
-
```
|
|
395
|
-
|
|
396
|
-
贡献指南见 [CONTRIBUTING.md](CONTRIBUTING.md);状态契约的版本迁移约定见
|
|
397
|
-
[docs/state-migrations.md](docs/state-migrations.md)。
|
|
398
|
-
|
|
399
|
-
### 本地链接调试
|
|
400
|
-
|
|
401
|
-
克隆到本地后,把包链接进 profile(把路径换成你自己的;`$DSH_HOME` 默认是 `~/.dsh`):
|
|
402
|
-
|
|
403
|
-
```sh
|
|
404
|
-
pnpm --dir ~/.dsh/profiles/web add link:/path/to/dsh-catppuccin
|
|
405
|
-
# Windows 例:
|
|
406
|
-
# pnpm --dir C:\Users\<you>\.dsh\profiles\web add link:D:\dev\dsh-catppuccin
|
|
336
|
+
pnpm install # 装依赖
|
|
337
|
+
pnpm typecheck # tsc --noEmit:src 的类型检查
|
|
338
|
+
pnpm typecheck:tests # tsc --noEmit:tests 的类型检查
|
|
339
|
+
pnpm test # vitest
|
|
340
|
+
pnpm build # tsdown -> lib/index.js(服务端)+ lib/client.js(浏览器)
|
|
407
341
|
```
|
|
408
342
|
|
|
409
|
-
|
|
410
|
-
`
|
|
411
|
-
|
|
343
|
+
配色表由 `scripts/generate-palettes.mjs` 生成,**不要手改** `src/client/palettes.ts`;
|
|
344
|
+
CHANGELOG 草稿由 `pnpm changelog:gen` 从 conventional 提交里产出。
|
|
345
|
+
完整命令清单、生成器与 typedoc、本地 link 调试见 [CONTRIBUTING.md](CONTRIBUTING.md);
|
|
346
|
+
状态契约的版本迁移约定见 [docs/state-migrations.md](docs/state-migrations.md)。
|
|
412
347
|
|
|
413
348
|
## 🙋 常见问题
|
|
414
349
|
|
|
@@ -436,9 +371,11 @@ pnpm --dir ~/.dsh/profiles/web add link:/path/to/dsh-catppuccin
|
|
|
436
371
|
A: 设置 → 常规 → **检查 Catppuccin 插件更新** 一键检测本插件在 npm 上的最新版本,
|
|
437
372
|
发现新版会给出可复制的升级命令;也可以随时手动执行
|
|
438
373
|
`dsh plugin --profile web update @nonamelego/dsh-catppuccin`
|
|
439
|
-
(或重新 `add`
|
|
440
|
-
|
|
441
|
-
|
|
374
|
+
(或重新 `add` 最新版)。
|
|
375
|
+
**桌面版要分壳**:社区壳 [DSH Desktop](https://github.com/anywhere-labs/dsh-desktop) 在应用内的
|
|
376
|
+
DSH 终端里用同一条命令(把 `web` 换成 `desktop`);**官方壳没有升级入口**——要在插件界面里
|
|
377
|
+
**先删掉本插件,再重新填一遍包名 `@nonamelego/dsh-catppuccin` 安装**,然后重启应用。
|
|
378
|
+
两种方式不通用,详见上面「安装 → 桌面版」的对照表。
|
|
442
379
|
|
|
443
380
|
## 💝 致谢
|
|
444
381
|
|
package/icon.png
ADDED
|
Binary file
|
package/lib/client.js
CHANGED
|
@@ -547,9 +547,11 @@ window.__ModuleLoader__.load({
|
|
|
547
547
|
"update.commandHint": "在终端运行以下命令升级(把 web 换成你的 profile 名):",
|
|
548
548
|
"update.commandHintDetected": "已自动探测到 profile「{profile}」,在终端运行以下命令升级:",
|
|
549
549
|
"update.commandHintDesktop": "已检测到你在使用 DSH Desktop,目标 profile「{profile}」,请在 DSH 终端中运行以下命令升级:",
|
|
550
|
+
"update.commandHintOfficialDesktop": "已检测到官方桌面版(DeepSeek Harness 客户端):它没有命令行升级入口——请在**插件界面**里先删除本插件,再把下面的包名粘进「添加插件」重新安装。",
|
|
550
551
|
"update.restartHint": "升级完成后重启 dsh web 生效。",
|
|
551
552
|
"update.restartHintDesktop": "升级完成后重启 DSH Desktop 生效。",
|
|
552
553
|
"update.copy": "复制命令",
|
|
554
|
+
"update.copySpec": "复制包名",
|
|
553
555
|
"update.copied": "已复制 ✓",
|
|
554
556
|
"update.failed": "检查失败,请稍后重试。",
|
|
555
557
|
"update.retry": "重试",
|
|
@@ -622,9 +624,11 @@ window.__ModuleLoader__.load({
|
|
|
622
624
|
"update.commandHint": "Run this in a terminal to upgrade (replace web with your profile name):",
|
|
623
625
|
"update.commandHintDetected": "Profile \"{profile}\" detected — run this in a terminal to upgrade:",
|
|
624
626
|
"update.commandHintDesktop": "DSH Desktop detected — target profile \"{profile}\", run this in the DSH terminal to upgrade:",
|
|
627
|
+
"update.commandHintOfficialDesktop": "Official desktop build detected (DeepSeek Harness client) — it has no CLI upgrade path: delete this plugin on the **Plugins** page, then paste the package name below into \"Add plugin\" to reinstall.",
|
|
625
628
|
"update.restartHint": "Restart dsh web after the upgrade.",
|
|
626
629
|
"update.restartHintDesktop": "Restart DSH Desktop after the upgrade.",
|
|
627
630
|
"update.copy": "Copy command",
|
|
631
|
+
"update.copySpec": "Copy package name",
|
|
628
632
|
"update.copied": "Copied ✓",
|
|
629
633
|
"update.failed": "Check failed — try again later.",
|
|
630
634
|
"update.retry": "Retry",
|
|
@@ -697,9 +701,11 @@ window.__ModuleLoader__.load({
|
|
|
697
701
|
"update.commandHint": "ターミナルで以下を実行してアップグレード(web をあなたの profile 名に変更):",
|
|
698
702
|
"update.commandHintDetected": "profile「{profile}」を検出。ターミナルで以下を実行してアップグレード:",
|
|
699
703
|
"update.commandHintDesktop": "DSH Desktop を検出。target profile「{profile}」、DSH ターミナルで以下を実行:",
|
|
704
|
+
"update.commandHintOfficialDesktop": "公式デスクトップ版(DeepSeek Harness クライアント)を検出: CLI からのアップグレード経路はありません——**プラグイン画面**で本プラグインを先に削除し、下のパッケージ名を「プラグインを追加」に貼り付けて再インストールしてください。",
|
|
700
705
|
"update.restartHint": "アップグレード後、dsh web を再起動してください。",
|
|
701
706
|
"update.restartHintDesktop": "アップグレード後、DSH Desktop を再起動してください。",
|
|
702
707
|
"update.copy": "コマンドをコピー",
|
|
708
|
+
"update.copySpec": "パッケージ名をコピー",
|
|
703
709
|
"update.copied": "コピーしました ✓",
|
|
704
710
|
"update.failed": "確認に失敗しました。後で再試行してください。",
|
|
705
711
|
"update.retry": "再試行",
|
|
@@ -772,9 +778,11 @@ window.__ModuleLoader__.load({
|
|
|
772
778
|
"update.commandHint": "터미널에서 다음을 실행해 업그레이드하세요 (web을 당신의 profile 이름으로 교체):",
|
|
773
779
|
"update.commandHintDetected": "profile「{profile}」을 감지했습니다. 터미널에서 다음을 실행하세요:",
|
|
774
780
|
"update.commandHintDesktop": "DSH Desktop 감지. 대상 profile「{profile}」, DSH 터미널에서 다음을 실행하세요:",
|
|
781
|
+
"update.commandHintOfficialDesktop": "공식 데스크톱 버전(DeepSeek Harness 클라이언트)을 감지했습니다: CLI 업그레이드 경로가 없습니다——**플러그인 화면**에서 이 플러그인을 먼저 삭제한 뒤 아래 패키지 이름을 「플러그인 추가」에 붙여 다시 설치하세요.",
|
|
775
782
|
"update.restartHint": "업그레이드 후 dsh web을 재시작하세요.",
|
|
776
783
|
"update.restartHintDesktop": "업그레이드 후 DSH Desktop을 재시작하세요.",
|
|
777
784
|
"update.copy": "명령 복사",
|
|
785
|
+
"update.copySpec": "패키지 이름 복사",
|
|
778
786
|
"update.copied": "복사됨 ✓",
|
|
779
787
|
"update.failed": "확인 실패. 잠시 후 다시 시도하세요.",
|
|
780
788
|
"update.retry": "다시 시도",
|
|
@@ -847,9 +855,11 @@ window.__ModuleLoader__.load({
|
|
|
847
855
|
"update.commandHint": "Ejecuta esto en una terminal para actualizar (sustituye web por el nombre de tu profile):",
|
|
848
856
|
"update.commandHintDetected": "Profile \"{profile}\" detectado: ejecuta esto en una terminal para actualizar:",
|
|
849
857
|
"update.commandHintDesktop": "DSH Desktop detectado: profile objetivo \"{profile}\", ejecuta esto en la terminal de DSH:",
|
|
858
|
+
"update.commandHintOfficialDesktop": "Se detectó la versión oficial de escritorio (cliente DeepSeek Harness): no tiene ruta de actualización por CLI; elimina este plugin en la página **Plugins** y pega el nombre del paquete de abajo en «Añadir plugin» para reinstalarlo.",
|
|
850
859
|
"update.restartHint": "Reinicia dsh web tras la actualización.",
|
|
851
860
|
"update.restartHintDesktop": "Reinicia DSH Desktop tras la actualización.",
|
|
852
861
|
"update.copy": "Copiar comando",
|
|
862
|
+
"update.copySpec": "Copiar nombre del paquete",
|
|
853
863
|
"update.copied": "Copiado ✓",
|
|
854
864
|
"update.failed": "Error al comprobar; inténtalo de nuevo más tarde.",
|
|
855
865
|
"update.retry": "Reintentar",
|
|
@@ -922,9 +932,11 @@ window.__ModuleLoader__.load({
|
|
|
922
932
|
"update.commandHint": "Exécutez ceci dans un terminal pour mettre à jour (remplacez web par le nom de votre profile) :",
|
|
923
933
|
"update.commandHintDetected": "Profile « {profile} » détecté — exécutez ceci dans un terminal :",
|
|
924
934
|
"update.commandHintDesktop": "DSH Desktop détecté — profile cible « {profile} », exécutez ceci dans le terminal DSH :",
|
|
935
|
+
"update.commandHintOfficialDesktop": "Version bureau officielle détectée (client DeepSeek Harness) : aucune mise à jour en ligne de commande — supprimez ce plugin dans la page **Plugins**, puis collez le nom du paquet ci-dessous dans « Ajouter un plugin » pour le réinstaller.",
|
|
925
936
|
"update.restartHint": "Redémarrez dsh web après la mise à jour.",
|
|
926
937
|
"update.restartHintDesktop": "Redémarrez DSH Desktop après la mise à jour.",
|
|
927
938
|
"update.copy": "Copier la commande",
|
|
939
|
+
"update.copySpec": "Copier le nom du paquet",
|
|
928
940
|
"update.copied": "Copié ✓",
|
|
929
941
|
"update.failed": "Échec de la vérification — réessayez plus tard.",
|
|
930
942
|
"update.retry": "Réessayer",
|
|
@@ -997,9 +1009,11 @@ window.__ModuleLoader__.load({
|
|
|
997
1009
|
"update.commandHint": "Führen Sie dies in einem Terminal aus (ersetzen Sie web durch Ihren Profile-Namen):",
|
|
998
1010
|
"update.commandHintDetected": "Profile „{profile}“ erkannt – führen Sie dies in einem Terminal aus:",
|
|
999
1011
|
"update.commandHintDesktop": "DSH Desktop erkannt – Ziel-Profile „{profile}“, führen Sie dies im DSH-Terminal aus:",
|
|
1012
|
+
"update.commandHintOfficialDesktop": "Offizielle Desktop-Version erkannt (DeepSeek Harness-Client): Es gibt keinen CLI-Upgradepfad – löschen Sie dieses Plugin auf der Seite **Plugins** und fügen Sie den Paketnamen unten in „Plugin hinzufügen“ ein, um es neu zu installieren.",
|
|
1000
1013
|
"update.restartHint": "Starten Sie dsh web nach dem Update neu.",
|
|
1001
1014
|
"update.restartHintDesktop": "Starten Sie DSH Desktop nach dem Update neu.",
|
|
1002
1015
|
"update.copy": "Befehl kopieren",
|
|
1016
|
+
"update.copySpec": "Paketnamen kopieren",
|
|
1003
1017
|
"update.copied": "Kopiert ✓",
|
|
1004
1018
|
"update.failed": "Prüfung fehlgeschlagen – versuchen Sie es später erneut.",
|
|
1005
1019
|
"update.retry": "Erneut versuchen",
|
|
@@ -3027,6 +3041,8 @@ window.__ModuleLoader__.load({
|
|
|
3027
3041
|
const autoResult = lastAutoResult();
|
|
3028
3042
|
const localInstall = payload?.ok === true && payload.installSource !== void 0 && payload.installSource !== "registry";
|
|
3029
3043
|
const isDesktop = payload?.ok === true && payload.env === "desktop";
|
|
3044
|
+
const officialDesktop = payload?.ok === true && payload.shell === "official-desktop";
|
|
3045
|
+
const upgradeValue = payload?.ok === true ? officialDesktop ? payload.updateSpec : payload.updateCommand : void 0;
|
|
3030
3046
|
const showConflict = conflicts > dismissedConflicts;
|
|
3031
3047
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
3032
3048
|
style: {
|
|
@@ -3273,14 +3289,14 @@ window.__ModuleLoader__.load({
|
|
|
3273
3289
|
" ",
|
|
3274
3290
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: payload.latest })
|
|
3275
3291
|
]
|
|
3276
|
-
}),
|
|
3292
|
+
}), upgradeValue !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
3277
3293
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
3278
3294
|
style: {
|
|
3279
3295
|
color: "var(--dsw-alias-label-tertiary)",
|
|
3280
3296
|
fontSize: 12,
|
|
3281
3297
|
lineHeight: "18px"
|
|
3282
3298
|
},
|
|
3283
|
-
children: isDesktop ? t("update.commandHintDesktop").replace("{profile}", payload.profile ?? "") : payload.profileDetected === true && payload.profile !== void 0 ? t("update.commandHintDetected").replace("{profile}", payload.profile) : t("update.commandHint")
|
|
3299
|
+
children: officialDesktop ? t("update.commandHintOfficialDesktop") : isDesktop ? t("update.commandHintDesktop").replace("{profile}", payload.profile ?? "") : payload.profileDetected === true && payload.profile !== void 0 ? t("update.commandHintDetected").replace("{profile}", payload.profile) : t("update.commandHint")
|
|
3284
3300
|
}),
|
|
3285
3301
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
3286
3302
|
style: {
|
|
@@ -3304,17 +3320,17 @@ window.__ModuleLoader__.load({
|
|
|
3304
3320
|
textOverflow: "ellipsis",
|
|
3305
3321
|
fontFamily: "ui-monospace, SFMono-Regular, Menlo, Consolas, monospace"
|
|
3306
3322
|
},
|
|
3307
|
-
children:
|
|
3323
|
+
children: upgradeValue
|
|
3308
3324
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
3309
3325
|
type: "button",
|
|
3310
3326
|
onClick: () => {
|
|
3311
|
-
copyCommand(
|
|
3327
|
+
copyCommand(upgradeValue).then(setCopied);
|
|
3312
3328
|
},
|
|
3313
3329
|
style: {
|
|
3314
3330
|
...buttonStyle,
|
|
3315
3331
|
cursor: "pointer"
|
|
3316
3332
|
},
|
|
3317
|
-
children: copied ? t("update.copied") : t("update.copy")
|
|
3333
|
+
children: copied ? t("update.copied") : t(officialDesktop ? "update.copySpec" : "update.copy")
|
|
3318
3334
|
})]
|
|
3319
3335
|
}),
|
|
3320
3336
|
localInstall && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|