dsh-any-background 0.4.1 → 0.4.3
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 +95 -90
- package/README.zh.md +95 -86
- package/lib/client.js +712 -203
- package/lib/client.js.map +1 -1
- package/lib/index.js +14 -0
- package/package.json +13 -10
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<a href="https://www.npmjs.com/package/dsh-any-background"><img alt="npm version" src="https://img.shields.io/npm/v/dsh-any-background?color=4d6bfe"></a>
|
|
5
5
|
<a href="https://www.npmjs.com/package/dsh-any-background"><img alt="npm monthly downloads" src="https://img.shields.io/npm/dm/dsh-any-background?color=4d6bfe"></a>
|
|
6
6
|
<a href="https://github.com/Tkingxiao/dsh-any-background/blob/main/LICENSE"><img alt="License: MIT" src="https://img.shields.io/npm/l/dsh-any-background?color=4d6bfe"></a>
|
|
7
|
-
<a href="https://www.npmjs.com/package/@deepseek-ai/dsh?activeTab=versions"><img alt="Supported DSH versions: 0.2.0-rc.1 ~ 0.2.
|
|
7
|
+
<a href="https://www.npmjs.com/package/@deepseek-ai/dsh?activeTab=versions"><img alt="Supported DSH versions: 0.2.0-rc.1 ~ 0.2.2-alpha.2 and above" src="https://img.shields.io/badge/DSH-0.2.0--rc.1%20~%200.2.2--alpha.2%2B-4d6bfe" /></a>
|
|
8
8
|
<a href="https://github.com/topics/dsh-better-sidebar"><img alt="Plugin ecosystem: GitHub topic dsh-better-sidebar" src="https://img.shields.io/badge/plugin%20ecosystem-topic%20dsh--better--sidebar-4d6bfe" /></a><br /><br />
|
|
9
9
|
<a href="https://github.com/Tkingxiao/dsh-any-background"><img src="https://img.shields.io/github/stars/Tkingxiao/dsh-any-background?style=social" alt="GitHub stars"></a>
|
|
10
10
|
<a href="https://dsh.directory/plugins/tkingxiao/dsh-any-background"><img src="https://dsh.directory/badges/listed.svg" alt="dsh.directory listed"></a>
|
|
@@ -12,102 +12,91 @@
|
|
|
12
12
|
|
|
13
13
|
English | [中文](README.zh.md)
|
|
14
14
|
|
|
15
|
-
A **DeepSeek Harness** appearance plugin: custom theme color, background wallpaper (image / video / algorithmically generated), and
|
|
15
|
+
A **DeepSeek Harness** appearance plugin: custom theme color, background wallpaper (image / video / algorithmically generated), and per-surface opacity & blur control. Compatible with **DSH `0.2.0-rc.1` through `0.2.2-alpha.2` — and every host release above it**.
|
|
16
16
|
|
|
17
17
|
---
|
|
18
18
|
|
|
19
19
|
## Screenshots
|
|
20
20
|
|
|
21
|
-
<
|
|
22
|
-
<
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
</
|
|
21
|
+
<table>
|
|
22
|
+
<tr>
|
|
23
|
+
<td align="center"><img src="example_img/image.png" width="440" alt="Custom homepage"><br/><em>Custom homepage · wallpaper + theme color applied</em></td>
|
|
24
|
+
<td align="center"><img src="example_img/image-2.png" width="440" alt="Theme color picker"><br/><em>Theme color picker · PS-style wheel + HSL/RGB inputs</em></td>
|
|
25
|
+
</tr>
|
|
26
|
+
<tr>
|
|
27
|
+
<td align="center"><img src="example_img/image-3.png" width="440" alt="Per-surface opacity and blur"><br/><em>Per-surface opacity and blur</em></td>
|
|
28
|
+
<td align="center"><img src="example_img/image-4.png" width="440" alt="Background editor"><br/><em>Background editor · pan and zoom</em></td>
|
|
29
|
+
</tr>
|
|
30
|
+
<tr>
|
|
31
|
+
<td align="center"><img src="example_img/image-6.png" width="440" alt="Generated dynamic background"><br/><em>Generated background · mesh gradient / Shader / geometric</em></td>
|
|
32
|
+
<td align="center"><img src="example_img/image-9.png" width="440" alt="Geometric background, low-poly mode"><br/><em>Generated background · geometric low-poly</em></td>
|
|
33
|
+
</tr>
|
|
34
|
+
<tr>
|
|
35
|
+
<td align="center" colspan="2"><img src="example_img/image-10.png" width="440" alt="Config export and import"><br/><em>Export and import configs to share them</em></td>
|
|
36
|
+
</tr>
|
|
37
|
+
</table>
|
|
26
38
|
|
|
27
|
-
|
|
28
|
-
<img src="example_img/image-2.png" alt="Theme color picker" width="720">
|
|
29
|
-
<br/>
|
|
30
|
-
<em>Theme color picker · PS-style wheel + precise HSL/RGB inputs</em>
|
|
31
|
-
</p>
|
|
39
|
+
## Features
|
|
32
40
|
|
|
33
|
-
|
|
34
|
-
<img src="example_img/image-3.png" alt="Per-part opacity and blur" width="720">
|
|
35
|
-
<br/>
|
|
36
|
-
<em>Per-part opacity and blur · main background, sidebar, cards, settings</em>
|
|
37
|
-
</p>
|
|
41
|
+
### Color & theme
|
|
38
42
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
43
|
+
- **PS-style color wheel** — Hue on the ring, saturation and lightness in the inscribed square; generates 30+ CSS design tokens live.
|
|
44
|
+
- **Precise HSL / RGB input** — Numeric entry, bidirectionally synced with the wheel.
|
|
45
|
+
- **Smart extraction / eyedropper** — One click derives a theme color from the wallpaper (sampling the visible area and discarding gray, near-black and near-white), or hover any pixel to pick it. Video wallpapers contribute an auto-captured frame. All client-side.
|
|
46
|
+
- **Forced light / dark scheme** — Light, dark or auto. In auto the surface and font direction follow the accent color's lightness (dark pick → light text), falling back to the wallpaper's brightness when no accent is set.
|
|
47
|
+
- **Theme export / import** — A self-contained `dsh-any-theme.json` (config + wallpaper + the whole rotation pool) that restores anywhere.
|
|
48
|
+
- **Presets & profiles** — Six one-click presets plus named profiles that can be renamed and duplicated; deleting asks for confirmation twice.
|
|
44
49
|
|
|
45
|
-
|
|
46
|
-
<img src="example_img/image-6.png" alt="Generated dynamic background" width="720">
|
|
47
|
-
<br/>
|
|
48
|
-
<em>Generated dynamic background · mesh gradient / Shader / geometric presets</em>
|
|
49
|
-
</p>
|
|
50
|
+
### Background & wallpaper
|
|
50
51
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
52
|
+
- **Image wallpaper** — Upload any image as the background.
|
|
53
|
+
- **Video wallpaper** — Muted, looping, survives refreshes (persisted on disk + HTTP Range streaming), with one frame captured for the preview, color extraction and position editing.
|
|
54
|
+
- **Position editor & layout modes** — Drag to pan, scroll or pinch to zoom, one-click reset; Fit / Fill / Stretch / Tile / Center. Image and video placements are stored separately and never overwrite each other.
|
|
55
|
+
- **Generated backgrounds** — Mesh gradient, Shader or geometric patterns, with adjustable spread and intensity and a lockable seed.
|
|
56
|
+
- **Wallpaper rotation** — Build a pool with the thumbnail picker and rotate by shuffle or order, on every refresh / hourly / daily / weekly; the cadence advances while the page stays open, not only on reload.
|
|
57
|
+
- **Day / night switch** — A day profile and a night profile, switched on a fixed schedule or by following the OS dark mode.
|
|
56
58
|
|
|
57
|
-
|
|
58
|
-
<img src="example_img/image-10.png" alt="Config export and import" width="720">
|
|
59
|
-
<br/>
|
|
60
|
-
<em>Export and import configs to share</em>
|
|
61
|
-
</p>
|
|
59
|
+
### Per-surface opacity & blur
|
|
62
60
|
|
|
63
|
-
|
|
61
|
+
- **Eleven parts, each with its own slider pair** — main background, sidebar, card panels, input & controls, settings panel, conversation frame, trajectory view, right sidebar (or bettersidebar), produced / highlighted content, header popovers, and the header bar.
|
|
62
|
+
- **The slider IS the frost amount, and 0 means no frost** — including over the host's own default menu frost. Every part still **defaults to 30px**, so a stock install keeps the frosted look.
|
|
63
|
+
- **Opacity re-scopes the host's own token** — it never stacks a second color over the original, so the wallpaper shows through the content.
|
|
64
|
+
- **Produced / highlighted content shares one slider** — code blocks (with their language banner), inline `code` chips and produced chips move together.
|
|
65
|
+
- **Right sidebar / bettersidebar: one pair, two identities** — without dsh-better-sidebar it drives the official right sidebar; with it installed the same pair takes over that plugin's bottom workbench panel (the official sidebar keeps responding too).
|
|
66
|
+
- **On the Windows desktop shell it also drives the caption band** — the sidebar pair paints the segment directly above the sidebar, and the cut follows the sidebar's width as it is dragged or collapsed (at width 0 the band returns to the header card). The 「标题栏」 card drives the rest of the band and the native window controls, with a four-state 「标题条带文字」 choice (auto / follow theme / always white / always black) for when a light strip fights the theme.
|
|
64
67
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
- **
|
|
68
|
-
- **
|
|
69
|
-
- **
|
|
70
|
-
- **
|
|
71
|
-
- **
|
|
72
|
-
- **
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
- **
|
|
77
|
-
- **
|
|
78
|
-
- **
|
|
79
|
-
- **Header popovers** — The session-header dropdowns get their own opacity + blur pair: the Agent Team panel, the background-job list, the open-in-app / session-log menus and the subagent lineage tree. On 0.1.7 the open-in-app picker moved to a portal and the session-row menu became a dynamic slot, so the plugin observes the stable `conversation.session.header*` slot anchors and tags the open popover at runtime instead of relying on class shapes. A popover counts as the header's when it is portaled to `<body>` **or** mounted inside one of those anchors — the session-log `…` menu is the second kind (`session-log-export/HeaderAction.tsx` renders its `Menu` without `portal`), and until 0.3.9 only a fragile `_denseList`-class arm reached it.
|
|
80
|
-
- **Header bar (the session title row)** — The row carrying the session title, its actions and the view tabs gets a slider pair of its own. The host paints nothing there (the centre column's background shows straight through), so once a wallpaper is up the title and tabs sat on the raw picture while every masked surface around them did not. It now paints as a region tint, the same recipe as the chat column's card: the material is the plugin's main-background surface at this part's own opacity, so the bar reads as one band over the column rather than a second colour stacked on it. The frost rides a `::before` underlay behind an `isolation:isolate` on the row — a stacking context that is NOT a backdrop root, which is what lets the overlays hanging off the row frost the wallpaper at all (through 0.3.8 the filter sat on the row itself, and a filtered row is a backdrop root: exactly those panels were left blurring a flat tint). Because that context still localizes the row's paint order, the row carries a compensating `z-index:10` — the overlays it hosts (the background-job list through `0.2.1-alpha.1`, the schedule task menu and the session-log `…` menu on every release) hang out of it with `z-index:100` and would otherwise be confined under the conversation. 10 clears the in-column chrome it overlaps (seat 9, back-to-bottom 8) and stays under every page-level surface (100 / 1000 / 1100), so nothing about the part's look changes when a menu opens. `z-index` needs no `position` — the row is a flex item, where it applies on its own — and the underlay's `position:relative` is written inline only while a blur exists and only when the host left the row `static`. See v0.3.7 / v0.3.9. On the Windows desktop shell the band it drives is split with the sidebar (previous bullet), dims itself while a modal is open (the host mask deliberately stops below the caption), and its generated segment is paint-only — `pointer-events:none` and no `app-region` declaration — so it can never swallow clicks meant for the native caption menubar (issue #29). It also paints below the
|
|
81
|
-
controls (`z-index:-1`) and carries its own ink (`--dsh-any-caption-ink`), so the sidebar toggle and the
|
|
82
|
-
应用 / 编辑 menubar stay readable even when a low sidebar opacity makes the strip light — and 「标题条带文字」 says who wins when the strip's brightness and the theme's direction disagree (自动 derives it from the strip, 跟随主题 leaves the host's own label ink alone, 始终白色 / 始终黑色 pins it; see issue #30). The anchor is expressed in CSS (the row is the `conversation.session.header` slot's direct parent) instead of guessing a hashed class or tagging a host element at runtime; before `0.1.7-alpha.1` the host mounts that slot bare with no such element, so there the rule matches nothing and the part is simply inert. On the Windows desktop shell the same slider pair also drives the window caption band — except for the segment that sits above the left sidebar, which belongs to that sidebar's own pair (see **Left sidebar + the caption band above it**) — and the native minimize/maximize/close block is handed `transparent` so Windows paints no background of its own, leaving the band itself showing through. A blank session marks the row `headerBlank` (a placeholder left with only its padding) and the plugin skips claiming it.
|
|
83
|
-
- **Sidebar "Theme" page (dual mode)** — The same five pages (Color / Interface / Font / Background / Profiles) register into two surfaces: without dsh-better-sidebar, a "Theme" card is contributed to the **official right Sidebar's guide page** through its public extension points (`sidebarRightTabs` + the `sidebar.right.pane.tab` keyed seat); with dsh-better-sidebar installed, the page registers in that plugin's sidebar instead and the official guide card withdraws itself, so the two never duplicate. Settings panel, official sidebar and better-sidebar all share one page implementation and one state store — a change in any of them shows up everywhere. The shell adapts to the panel width, and a narrow panel tightens padding and falls back to a single column. On a host without the right Sidebar the registration silently never happens.
|
|
84
|
-
- **Conversation View Cards** — The message list is wrapped in a translucent card automatically, and the trajectory page gets whole-page opacity & blur controls, letting the wallpaper shine through the content.
|
|
85
|
-
- **Theme Export / Import** — One-click export to a self-contained `dsh-any-theme.json` (config + wallpaper, video embedded as a data URL, and — from v0.4.0 — the whole rotation pool's image bytes) and import to restore it anywhere.
|
|
86
|
-
- **Appearance Presets & Profiles** — Six one-click presets (Default / Frosted glass / Minimal / Midnight / Cyber / Warm daylight) plus named profiles: save the current look and re-apply it anytime; profiles can be renamed and duplicated, and a two-step confirm guards deletion.
|
|
87
|
-
- **Wallpaper Rotation** — Add images to a rotation pool (thumbnail picker included) and let the wallpaper change by shuffle or order on every refresh, hourly, daily, or weekly — the cadence advances while the page stays open, not only on reload. Advancing copies the chosen image into the active wallpaper slot, so export/import and color extraction keep working unchanged.
|
|
88
|
-
- **Day/Night Auto Switch** — Assign a day profile and a night profile; the plugin switches automatically at fixed clock times or by following the OS dark mode.
|
|
89
|
-
- **Custom Font** — Upload a ttf / otf / woff / woff2 file (up to 100 MB) and apply it to the whole interface through `@font-face`; toggle it off or remove it at any time. Fonts stream as raw bytes and persist in the plugin data dir; code blocks keep their monospace stack.
|
|
90
|
-
- **Per-part Text Outline** — The same surface groups as the interface page (now eleven, including the header popovers and the header bar), each with its own `-webkit-text-stroke`: width 0–4 px (0 = off) and a color of auto-contrast / gray / black / white / accent / custom. Code blocks, inline `code`, icons and the host's `background-clip: text` shimmer chrome (the "深度求索中" turn-status line and the turn-process rows) are exempted automatically, so multi-color syntax never smears and gradient text is never flattened into a stroke-coloured blob.
|
|
91
|
-
- **Forced Interface Scheme** — Force light or dark token palettes regardless of the accent color's lightness; in `Auto` both the surface and font directions follow the accent's lightness (dark pick → light fonts, light pick → dark fonts), falling back to the wallpaper's perceived brightness when no color is picked.
|
|
92
|
-
- **File-based Persistence** — All settings are stored on the filesystem under `~/.dsh/.dsh-any-background-data/`, not `localStorage`.
|
|
93
|
-
- **Bilingual** — Full Chinese / English UI with automatic locale detection.
|
|
94
|
-
- **Theme Watchdog** — Re-asserts the custom theme if the host resets it.
|
|
68
|
+
### Interface parts
|
|
69
|
+
|
|
70
|
+
- **Sidebar "Theme" page (dual mode)** — The same five pages (Color / Interface / Font / Background / Profiles) register into the official right sidebar's guide page or into dsh-better-sidebar's sidebar, sharing one state with the settings panel, so a change anywhere shows everywhere. On a host without that extension point nothing is registered, silently.
|
|
71
|
+
- **Conversation view cards** — The message list is wrapped in a translucent card automatically, and the trajectory page adjusts as a whole page.
|
|
72
|
+
- **Header popovers and the header bar are separately adjustable** — the Agent Team panel, the background-job list, the session-header dropdowns, and the title / view-tab row at the top of a session each have their own opacity + blur pair.
|
|
73
|
+
- **Custom font** — Upload a ttf / otf / woff / woff2 (up to 100 MB) and apply it across the interface; code blocks stay monospace. Can be disabled or removed at any time.
|
|
74
|
+
- **Per-part text outline** — The same surface groups as the interface page, each with its own `-webkit-text-stroke` (0–4px, 0 = off) in auto-contrast / gray / black / white / accent / custom. Code blocks, inline `code`, icons and the host's gradient-shimmer text are exempt automatically.
|
|
75
|
+
- **Third-party compatibility** — When [dsh-better-display](https://github.com/aa2246740/dsh-better-display) is detected, its sticky summary band is pinned at a 20% plate + 30px frost outside the sliders. Any other plugin whose surface reads a token this plugin owns is named in the console, and the whole accommodation can be switched off in Settings.
|
|
76
|
+
|
|
77
|
+
### General
|
|
78
|
+
|
|
79
|
+
- **File-based persistence** — Everything is stored under `~/.dsh/.dsh-any-background-data/`, not in `localStorage`.
|
|
80
|
+
- **Bilingual UI** — Full Chinese / English interface following the host's locale.
|
|
81
|
+
- **Theme watchdog** — Re-asserts the custom theme if the host resets it.
|
|
95
82
|
|
|
96
83
|
## Changelog (latest two releases)
|
|
97
84
|
|
|
98
|
-
### v0.4.
|
|
85
|
+
### v0.4.2 (dsh-better-display's summary bar compatibility · fixes issue #32)
|
|
99
86
|
|
|
100
|
-
- **
|
|
101
|
-
- **
|
|
87
|
+
- **The summary bar is no longer hollowed out.** Its plate reads the token our 「主界面」 opacity owns, so at 0 the conversation streamed straight through it. When [dsh-better-display](https://github.com/aa2246740/dsh-better-display) is detected the band is pinned at a **20% plate + 30px frost** — no slider moves it, the color still follows the theme — and the three separate bars merge into one box with the bottom corners rounded.
|
|
88
|
+
- **Third-party surface self-check + a compatibility switch.** At boot the plugin scans other plugins' stylesheets and names in the console whose surface reads a token this plugin owns: registered ones get protected automatically, unregistered ones log a note inviting that line to be reported. A card at the bottom of the Interface page switches the whole pin sheet off, leaving the other plugin to paint its own surfaces.
|
|
89
|
+
- **Issue #32 fixed.** The frosted sidebar column is lifted to `z-index:1`, so a tooltip overhanging the sidebar's right edge stays crisp; the modal exemption now resets `z-index` and `isolation` together.
|
|
90
|
+
- After installing or updating, **restart the host once** — the compatibility gate runs when the profile is assembled.
|
|
102
91
|
|
|
103
|
-
### v0.4.
|
|
92
|
+
### v0.4.3 (follows dsh `0.2.1-rc.5` and the newly opened `0.2.2` line)
|
|
104
93
|
|
|
105
|
-
- **
|
|
106
|
-
-
|
|
107
|
-
-
|
|
108
|
-
- **
|
|
109
|
-
- **
|
|
110
|
-
-
|
|
94
|
+
- **Newly checked host builds**: `0.2.1-rc.4`, `0.2.1-rc.5`, `0.2.2-alpha.2`.
|
|
95
|
+
- **`rc.4` / `rc.5` change nothing.** Every shipped file of the 296 `@deepseek-ai/dsh-*` packages in a `0.2.1-rc.3` install was hashed through `rc.5`: 30 files moved in total, and not one of them is a stylesheet this plugin reads. Three are inlined version-string literals; the rest are the host's settings-tab tooltip becoming conditional and the reasoning-body slot gaining a `rawText`. No token, no `[class*="…"]` class shape, no `z-index` and no `data-slot` key moved, so both builds join the `v0-2-1` row and their verdict rises from `line` to `exact`.
|
|
96
|
+
- **`0.2.2` is a new patch line, so `v0-2-2` opens its own facts folder.** That release is big (1151 files changed, 1709 added), but every fact this plugin claims was re-read and still holds: `_handle{z-index:11}` / `_leadingSeat{z-index:15}` / `_overlayLayer{z-index:20}` are byte-identical (so the sidebar column's ceiling of 1 and the header row's 10 are argued exactly as before), the four menu-frost tokens and the 8 `--dsw-menu-backdrop-filter` consumers are unchanged, the host still composes `--dsw-font-family` on `body` (the font rule's `!important` still has to win), the five session-header slot keys stand, and all 75 host selectors this plugin writes still match. The host's peer gate is byte-identical too.
|
|
97
|
+
- **Two host changes on `0.2.2` worth recording**: `--dsw-specific-sidebar-nav-item-hover` is deleted host-side, together with its only consumer — the plugin still writes the token, which now writes something nobody reads, and since the host stopped painting that hover at all there is no regression against the host default; and `ui-plugin-manager` gained a new consumer of the token the main-interface slider takes over (a `pointer-events:none` underlay behind the page header), which paints nothing at the default value but is a new row on the "who reads this token" list.
|
|
98
|
+
- **The version gate now has its own check**: `npm test` verifies that `engines.dsh`, the six peer ranges and `dsh.compatibility.dsh` each name every verified build and all keep their uncapped tail, and that `lib/` really carries those builds and their channels — so editing `src/` without re-bundling is now caught outright.
|
|
99
|
+
- After installing or updating, **restart the host once** — the compatibility gate runs when the profile is composed.
|
|
111
100
|
|
|
112
101
|
## Installation
|
|
113
102
|
|
|
@@ -151,21 +140,37 @@ pnpm dsh web
|
|
|
151
140
|
|
|
152
141
|
## Compatibility
|
|
153
142
|
|
|
154
|
-
- **[`dsh web`](https://github.com/deepseek-ai/deepseek-harness) `0.2.0-rc.1` ~ `0.2.
|
|
155
|
-
- **
|
|
156
|
-
- **
|
|
157
|
-
|
|
143
|
+
- **[`dsh web`](https://github.com/deepseek-ai/deepseek-harness): `0.2.0-rc.1` ~ `0.2.2-alpha.2`, and everything above it.** The gate names each build that was checked and then closes with an uncapped `>=0.2.0-rc.1`. That umbrella is deliberate: the host enforces exactly this peer list — a release it does not name is disabled before a single module is imported — so a range that runs out is a wall in front of a plugin that would have kept working. (More precisely: the host's `app-boot` `unmetRequirements` reads `engines.dsh` alone when that field is present and ignores peerDependencies, so all four places must say the same thing but `engines.dsh` is what actually decides whether the plugin loads.)
|
|
144
|
+
- **How an unseen build runs**: it gets the closest verified set of facts plus a log line saying how far from `exact` that is. The worst a stale fact can cost is one slider no longer fading a surface the host has since moved; a version check that failed closed would cost the whole plugin.
|
|
145
|
+
- **Verified builds** (`dsh.compatibility.dshReleases`):
|
|
146
|
+
|
|
147
|
+
| Host build | Facts folder | Notes |
|
|
148
|
+
|---|---|---|
|
|
149
|
+
| `0.2.0-rc.1` | `v0-2-0-rc-1` | verified by diffing its tag, package by package |
|
|
150
|
+
| `0.2.0-rc.2` | `v0-2-0-rc-2` | same; this rc renamed the token a sticky menu group heading paints from, so it opened its own facts |
|
|
151
|
+
| `0.2.1-alpha.1` ~ `0.2.1-rc.5` | `v0-2-1` | facts unchanged, folded into one folder; every checked build gets its own row with an `exact` verdict. `rc.4` and `rc.5` ship artifacts byte-identical to `rc.3`, file by file |
|
|
152
|
+
| `0.2.2-alpha.2` | `v0-2-2` | a new patch line, so its own facts folder; every claim re-read and still true (z-index ladder, menu frost tokens, font token composition, header slot keys, 75 host selectors matching) |
|
|
153
|
+
| above `0.2.2-alpha.2` | reuses the closest row | an unverified build takes that line's adapter, stated in the log |
|
|
154
|
+
|
|
155
|
+
- **Facts are isolated per release**: the host release is resolved on the Node half and handed down through the `read` RPC; styling and logic only ask the adapter questions (who owns this surface, which layer carries the frost, which token fades a menu) and never compare version strings. Supporting a new host means adding one version folder and registering it.
|
|
156
|
+
- **A restart is still needed after installing or updating the plugin**: the compatibility check runs while the profile is composed, not when the plugin is updated. Features that depend on a specific host structure (the right sidebar's panel blur, the official sidebar's "Theme" card) enable themselves only where that structure exists; everything else behaves identically across the range.
|
|
157
|
+
- **The `0.1.5` / `0.1.6` / `0.1.7` era is out of the supported range**: those fact folders assert things nothing re-checks any more, and a table nobody verifies is worse than no table. An older host is now refused at composition rather than quietly restyled by the wrong adapter.
|
|
158
|
+
- **[DSHA](https://github.com/DSH-APP/DSHA)** — the DeepSeek Harness Android launcher (ROOT-free, Termux-free). Its bundled `dsh` is `0.1.5-rc.2`, below this plugin's supported floor: the peer gate refuses it at composition, so the plugin never loads there.
|
|
159
|
+
- **[deepseek-harness-desktop](https://github.com/anywhere-labs/deepseek-harness-desktop)** — supported. Windows-only behavior (the caption band, the native window controls) applies on the desktop shell only.
|
|
158
160
|
|
|
159
161
|
## Permissions, side effects & boundaries
|
|
160
162
|
|
|
161
|
-
- **Integration form**: official Profile Bundle — `package.json` declares `dsh.bundle.patch: ./cordis.patch.yml` (a loader insert layer)
|
|
162
|
-
- **Filesystem**: the server half reads and writes only inside `<dsh home>/.dsh-any-background-data/` (config
|
|
163
|
-
- **Network**: one outbound fetch
|
|
164
|
-
- **Shell / native**: none. No `child_process`, no native modules, no dynamically downloaded
|
|
165
|
-
- **HTTP surface**:
|
|
166
|
-
- **Restart
|
|
167
|
-
- **Tests & verification**: `pnpm run typecheck` (full tsc check)
|
|
168
|
-
- **Known limitations**:
|
|
163
|
+
- **Integration form**: an official Profile Bundle — `package.json` declares `dsh.bundle.patch: ./cordis.patch.yml` (a loader insert layer) and the repository ships ready-to-use prebuilt artifacts (`lib/index.js`, `lib/client.js`). No install scripts, no postinstall, no native binaries, no build step at install time.
|
|
164
|
+
- **Filesystem**: the server half reads and writes only inside `<dsh home>/.dsh-any-background-data/` (config, wallpaper, rotation pool, video, font) and touches nothing outside it; config writes are atomic (temp file + rename). These files live on the real disk, so they are **outside generation restore — it neither captures nor rolls them back**; deleting the directory is a full plugin reset.
|
|
165
|
+
- **Network**: exactly one outbound fetch, and only when the user pastes an http/https image or video URL and presses Apply. No telemetry, no other external calls.
|
|
166
|
+
- **Shell / native**: none. No `child_process`, no native modules, no dynamically downloaded binaries.
|
|
167
|
+
- **HTTP surface**: only `/dsh-any-background/{video,wallpaper,font}` (GET/HEAD streaming) with the matching `*/upload` POST routes (100 MB cap), plus the dedicated RPC channel `/dsh-any-background`, all under the local dsh web server. No extra listening ports.
|
|
168
|
+
- **Restart required**: the first install needs a (re)start of `dsh web` to load the client bundle; settings changes afterwards apply live and persist automatically. Changing plugin version requires a restart to pick up the new `lib/client.js`.
|
|
169
|
+
- **Tests & verification**: `pnpm run typecheck` (full tsc check), `pnpm run bundle` (tsdown emits `lib/`), and `npm test`, which starts the real host half and round-trips config writes, reads and profiles plus the upload fence. Visual changes go through two further paths: a local mock page that measures computed values, and real `dsh web` testing slider by slider.
|
|
170
|
+
- **Known limitations**:
|
|
171
|
+
- The styling relies on stable host DOM markers (such as `[data-sidebar-right-panel]`) and CSS token names. A host restyle of those layers can leave a slider ineffective for its surface — cosmetic only, nothing breaks. The version-specific half of those selectors lives inside its own version folder, so a host revision normally means editing that one file.
|
|
172
|
+
- `-webkit-text-stroke` may clip about 1px at the edge of some single-line ellipsis containers.
|
|
173
|
+
- One rule is a deliberate cross-plugin accommodation: dsh-better-display paints its sticky reading lanes from the token our 「主界面」 opacity owns, so when that plugin is detected its lanes are pinned at a 20% plate + 30px frost outside the sliders. If it ever renames those markers the rule stops matching and its lanes go back to being painted its own way.
|
|
169
174
|
|
|
170
175
|
## Star History
|
|
171
176
|
|