dsh-dream-skin 0.2.3 โ 0.2.4
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 +54 -9
- package/README.md +53 -9
- package/lib/client.js +96 -17
- package/package.json +1 -1
package/README.en.md
CHANGED
|
@@ -6,11 +6,16 @@
|
|
|
6
6
|
|
|
7
7
|
# dsh-dream-skin ๐ฎ
|
|
8
8
|
|
|
9
|
-
**
|
|
9
|
+
**Give DeepSeek Harness a face that breathes, feels, and belongs to you.**
|
|
10
10
|
|
|
11
|
-
Native skinning
|
|
11
|
+
Native skinning ยท wallpaper ยท shareable theme packs โ a romance-engineered project built entirely on DSH's official `--dsw-*` token system.
|
|
12
12
|
|
|
13
|
-
>
|
|
13
|
+
> **TL;DR: code with atmosphere.** โจ
|
|
14
|
+
|
|
15
|
+
| ๐จ 8 original themes | ๐ผ๏ธ wallpaper + opacity/blur | ๐ one-click accent | ๐ฆ shareable theme packs |
|
|
16
|
+
|---|---|---|---|
|
|
17
|
+
|
|
18
|
+
> 3-line install ยท purely native (no injection, no installer patches) ยท survives DSH updates
|
|
14
19
|
|
|
15
20
|
[ไธญๆ](./README.md) ยท [Changelog](./CHANGELOG.md) ยท [Project Notes](./docs/PROJECT.md) ยท [Publishing Guide](./docs/publishing-to-npm.md)
|
|
16
21
|
|
|
@@ -38,6 +43,18 @@ Native skinning + wallpaper + theme packs โ a romance-engineered project built
|
|
|
38
43
|
|
|
39
44
|
---
|
|
40
45
|
|
|
46
|
+
## ๐ธ Screenshots
|
|
47
|
+
|
|
48
|
+
> Real screenshots, not mockups. Left: DSH after applying a skin; right: the dedicated **Theme / Appearance** section in Settings.
|
|
49
|
+
|
|
50
|
+
<p align="center">
|
|
51
|
+
<img src="docs/screenshots/preview.png" alt="DSH skin preview" width="46%"/>
|
|
52
|
+
|
|
53
|
+
<img src="docs/screenshots/settings.png" alt="Theme section in settings" width="46%"/>
|
|
54
|
+
</p>
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
41
58
|
## ๐ Why it earns a star (vs alternatives)
|
|
42
59
|
|
|
43
60
|
| Capability | Ours | Other DSH skinning | Codex-Dream-Skin (desktop) |
|
|
@@ -55,7 +72,7 @@ Native skinning + wallpaper + theme packs โ a romance-engineered project built
|
|
|
55
72
|
|
|
56
73
|
| Capability | Description |
|
|
57
74
|
|------------|-------------|
|
|
58
|
-
| ๐จ **8 bundled presets (Mirage)** | Switch instantly under **Settings โ
|
|
75
|
+
| ๐จ **8 bundled presets (Mirage)** | Switch instantly under **Settings โ Theme / Appearance**, light & dark |
|
|
59
76
|
| ๐ผ๏ธ **Custom wallpaper** | Pick a local image (auto-compressed โค2MB), tune **opacity / blur** |
|
|
60
77
|
| ๐ค **Opaque inner surfaces** | Cards, inputs, message bubbles stay readable โ never washed out |
|
|
61
78
|
| โฉ๏ธ **Default restore** | Back to DSH's built-in appearance (follow system) in one click |
|
|
@@ -68,9 +85,10 @@ Differentiation inspired by existing DSH skin projects plus Codex's skin UX:
|
|
|
68
85
|
| Capability | Description |
|
|
69
86
|
|------------|-------------|
|
|
70
87
|
| ๐ฆ **Theme-pack format + import/export** | A `*.dsh-theme.json` pack = format marker + version + manifest (id/name/author/scheme/accent/tokens). Import a file, one-click apply, and copy a **share link** (encoded in the URL hash) |
|
|
71
|
-
| ๐ **Per-user Accent** | Stack a custom brand-accent
|
|
72
|
-
| ๐ผ๏ธ **Wallpaper 2.0** |
|
|
88
|
+
| ๐ **Per-user Accent** | Stack a custom brand-accent over the active skin (`overrideTokens` layer, the skin untouched): **12 one-click preset swatches**, a color picker, **randomize**, and clear |
|
|
89
|
+
| ๐ผ๏ธ **Wallpaper 2.0** | Local image / **image URL** / **gradient presets**, with a **per-skin suggested gradient** and **auto-dim**; **Recent** (up to 5) to switch back in one click |
|
|
73
90
|
| ๐งฉ **Local pack library** | All built-in skins + imported packs in one place; **apply / favorite** in a click |
|
|
91
|
+
| โ
**Clear selection feedback** | Switching skins updates the checked/bordered highlight **instantly** โ no stale white highlight box |
|
|
74
92
|
| ๐ฒ **Surprise me** | Randomly switch to a theme different from the current one |
|
|
75
93
|
| โญ **Favorites** | Star your favorite skins and switch between them fast |
|
|
76
94
|
| โ
**Validation + rollback** | Pack import validates format / required tokens / color legality; failures or removals fall back safely |
|
|
@@ -82,7 +100,7 @@ Differentiation inspired by existing DSH skin projects plus Codex's skin UX:
|
|
|
82
100
|
dsh plugin --profile web add dsh-dream-skin
|
|
83
101
|
# 2. restart
|
|
84
102
|
dsh web
|
|
85
|
-
# 3. open Settings โ
|
|
103
|
+
# 3. open Settings โ Theme / Appearance โ pick a skin โ done.
|
|
86
104
|
```
|
|
87
105
|
|
|
88
106
|
> Installs the published npm package โ no cloning. If `dsh plugin add` reports a workspace error, append `-w`.
|
|
@@ -104,7 +122,7 @@ packages**:
|
|
|
104
122
|
|
|
105
123
|
- **Install command = the official one**: `dsh plugin --profile web add dsh-dream-skin`
|
|
106
124
|
- **Uses official extension points**: `ctx.theme` (register themes), `ctx.theme.overrideTokens` (override layers),
|
|
107
|
-
`ctx.slots` (mount UI into **Settings โ
|
|
125
|
+
`ctx.slots` (mount UI into a dedicated **Settings โ Theme / Appearance** section).
|
|
108
126
|
- **Manifest contract matches official packages**: `dsh.bundle` + `dsh.client` + `exports["./client"]`.
|
|
109
127
|
|
|
110
128
|
In other words: you are not installing a fringe script โ this is a standard skin plugin inside DSH's official plugin
|
|
@@ -157,7 +175,7 @@ Then **restart** the web server:
|
|
|
157
175
|
dsh web
|
|
158
176
|
```
|
|
159
177
|
|
|
160
|
-
Open **Settings โ
|
|
178
|
+
Open **Settings โ Theme / Appearance** to see the **Skins**, **Accent**, **Wallpaper** / **Advanced Wallpaper**, and **Theme Packs** rows.
|
|
161
179
|
|
|
162
180
|
> The `-w` (workspace) flag is needed on a bare `add` because every profile ships a `pnpm-workspace.yaml`; pnpm treats
|
|
163
181
|
> the profile directory as a workspace root, so a bare add fails with `ERR_PNPM_ADDING_TO_ROOT`. If your profile already
|
|
@@ -169,6 +187,26 @@ Open **Settings โ General** to see the **Skins**, **Accent**, **Wallpaper** /
|
|
|
169
187
|
dsh plugin --profile web add -w /path/to/dsh-dream-skin
|
|
170
188
|
```
|
|
171
189
|
|
|
190
|
+
## ๐ Update / Uninstall
|
|
191
|
+
|
|
192
|
+
**Update to the latest** (when installed from the npm release):
|
|
193
|
+
|
|
194
|
+
```sh
|
|
195
|
+
dsh plugin --profile web update dsh-dream-skin
|
|
196
|
+
dsh web # restart to pick it up
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
> Stuck on an old version after an update? pnpm's minimum-release-age (supply-chain) policy can hold back a
|
|
200
|
+
> freshly published release. In the profile dir run:
|
|
201
|
+
> `pnpm add dsh-dream-skin@latest --config.minimumReleaseAge=0` to force it.
|
|
202
|
+
|
|
203
|
+
**Uninstall:**
|
|
204
|
+
|
|
205
|
+
```sh
|
|
206
|
+
dsh plugin --profile web remove dsh-dream-skin
|
|
207
|
+
dsh web # restores the official appearance
|
|
208
|
+
```
|
|
209
|
+
|
|
172
210
|
## ๐งฉ Compatibility
|
|
173
211
|
|
|
174
212
|
| Item | Value |
|
|
@@ -231,6 +269,8 @@ seeds (`react`, `react/jsx-runtime`, โฆ) and registered client bundles (`@deeps
|
|
|
231
269
|
it then appears in Settings automatically. Add a `skin.<id>` key to both the `zh` and `en` dictionaries.
|
|
232
270
|
- **Ship a theme pack (recommended)**: follow [`docs/examples/sample-theme-pack.json`](./docs/examples/sample-theme-pack.json) โ
|
|
233
271
|
one `*.dsh-theme.json` is importable in Settings and shareable via a link, no code changes needed.
|
|
272
|
+
- **Add your own wallpapers**: drop images into [`wallpapers/`](./wallpapers/) (distribute only what you have rights
|
|
273
|
+
to), then import them via DSH's "Wallpaper" row.
|
|
234
274
|
- **Validate**: `npm test` (VM smoke tests covering factory eval, `apply()`, and pack import/persistence).
|
|
235
275
|
- **Repaint**: reference the `--dsw-alias-*` tokens (full contract in [`docs/themes-spec.md`](./docs/themes-spec.md)).
|
|
236
276
|
|
|
@@ -251,6 +291,11 @@ seeds (`react`, `react/jsx-runtime`, โฆ) and registered client bundles (`@deeps
|
|
|
251
291
|
Issues and PRs welcome! Please read the [Contributing Guide](./CONTRIBUTING.md) and follow the
|
|
252
292
|
[Code of Conduct](./CODE_OF_CONDUCT.md).
|
|
253
293
|
|
|
294
|
+
## โญ Support the project
|
|
295
|
+
|
|
296
|
+
If you like it: star **โญ** the repo, thumbs-up **๐** on npm, or share it with DSH friends โ it helps the project
|
|
297
|
+
get discovered and keeps it maintained. Want to contribute themes / an online Studio / more skins? Join in.
|
|
298
|
+
|
|
254
299
|
## ๐ Security
|
|
255
300
|
|
|
256
301
|
Found a security issue? Don't open a public issue โ see the [Security Policy](./SECURITY.md).
|
package/README.md
CHANGED
|
@@ -6,11 +6,16 @@
|
|
|
6
6
|
|
|
7
7
|
# dsh-dream-skin ๐ฎ
|
|
8
8
|
|
|
9
|
-
**่ฎฉ DeepSeek Harness
|
|
9
|
+
**่ฎฉ DeepSeek Harness ๆขไธๅผ ไผๅผๅธใๆๆ
็ปชใๅฑไบไฝ ็่ธใ**
|
|
10
10
|
|
|
11
|
-
ๅ็ๆข่ค
|
|
11
|
+
ๅ็ๆข่ค ยท ่ๆฏๅฃ็บธ ยท ไธป้ขๅ
ๅไบซ โโ ๅฎๅ
จ็จๅฎๆน `--dsw-*` token ็ณป็ปๅฎ็ฐ็ๆตชๆผซๅทฅ็จใ่ฃ
ไธๆฌก๏ผ็ป่บซๅฏๆขใ
|
|
12
12
|
|
|
13
|
-
>
|
|
13
|
+
> **ไธๅฅ่ฏ๏ผๅไปฃ็ ๏ผไน่ฆๆๆฐๅดๆใ** โจ
|
|
14
|
+
|
|
15
|
+
| ๐จ 8 ๅฅๅๅไธป้ข | ๐ผ๏ธ ๅฃ็บธ + ้ๆๅบฆ/ๆจก็ณ | ๐ ๅผบ่ฐ่ฒ็นไธไธ | ๐ฆ ไธป้ขๅ
ๅฏๅไบซ |
|
|
16
|
+
|---|---|---|---|
|
|
17
|
+
|
|
18
|
+
> 3 ่กๅฎ่ฃ
ยท ็บฏๅ็๏ผๆ ๆณจๅ
ฅ/ไธๆนๅฎ่ฃ
ๅ
๏ผยท ไธๅ DSH ๆดๆฐๅคฑๆ
|
|
14
19
|
|
|
15
20
|
[English](./README.en.md) ยท [ๅๆดๆฅๅฟ](./CHANGELOG.md) ยท [้กน็ฎ่ฏดๆ](./docs/PROJECT.md) ยท [ๅๅธๆๅผ](./docs/publishing-to-npm.md)
|
|
16
21
|
|
|
@@ -37,6 +42,18 @@
|
|
|
37
42
|
|
|
38
43
|
---
|
|
39
44
|
|
|
45
|
+
## ๐ธ ๅฎๆบๆชๅพ
|
|
46
|
+
|
|
47
|
+
> ็ๆบๆๆ๏ผ้ๆฆๅฟตๅพใๅทฆ๏ผๅบ็จๆๅฅ็ฎ่คๅ็ DSH ็้ข๏ผๅณ๏ผ่ฎพ็ฝฎ้็ใๅค่ง / Themeใๅ่ใ
|
|
48
|
+
|
|
49
|
+
<p align="center">
|
|
50
|
+
<img src="docs/screenshots/preview.png" alt="DSH ็ฎ่คๅฎๆบ้ข่ง" width="46%"/>
|
|
51
|
+
|
|
52
|
+
<img src="docs/screenshots/settings.png" alt="่ฎพ็ฝฎไธญ็ๅค่งๅ่" width="46%"/>
|
|
53
|
+
</p>
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
40
57
|
## ๐ ไธบไปไนๅผๅพ็จ๏ผvs ๅ็ฑป๏ผ
|
|
41
58
|
|
|
42
59
|
| ่ฝๅ | ๆฌๆไปถ | ๅ
ถๅฎ DSH ๆข่คๆนๆก | Codex-Dream-Skin (ๆก้ข) |
|
|
@@ -54,7 +71,7 @@
|
|
|
54
71
|
|
|
55
72
|
| ่ฝๅ | ่ฏดๆ |
|
|
56
73
|
|------|------|
|
|
57
|
-
| ๐จ **8 ๅฅไธป้ข้ข่ฎพ๏ผMirage ๅนปๆขฆ๏ผ** | ๅจ **่ฎพ็ฝฎ โ
|
|
74
|
+
| ๐จ **8 ๅฅไธป้ข้ข่ฎพ๏ผMirage ๅนปๆขฆ๏ผ** | ๅจ **่ฎพ็ฝฎ โ ๅค่ง๏ผTheme๏ผ** ไธ้ฎๅๆข๏ผๆต
่ฒ / ๆทฑ่ฒๅ
ผ้กพ |
|
|
58
75
|
| ๐ผ๏ธ **่ชๅฎไนๅฃ็บธ** | ไธไผ ๆฌๅฐๅพ๏ผ่ชๅจๅ็ผฉ โค2MB๏ผ๏ผ่ฐ่**้ๆๅบฆ / ๆจก็ณ** |
|
|
59
76
|
| ๐ค **ๅ
ๅฑไธ้ๆ** | ๅก็ใ่พๅ
ฅๆกใๆถๆฏๆฐๆณกไธ่ขซๅฃ็บธ็ไฝ๏ผๅฏ่ฏปๆงไผๅ
|
|
|
60
77
|
| โฉ๏ธ **้ป่ฎค่ฟๅ** | ไธ้ฎๅๅฐ DSH ๅ
็ฝฎๅค่ง๏ผ่ท้็ณป็ป๏ผ |
|
|
@@ -67,9 +84,10 @@
|
|
|
67
84
|
| ่ฝๅ | ่ฏดๆ |
|
|
68
85
|
|------|------|
|
|
69
86
|
| ๐ฆ **ไธป้ขๅ
ๆ ผๅผ + ๅฏผๅ
ฅ/ๅฏผๅบ** | ไธไธช `*.dsh-theme.json` ไธป้ขๅ
= ๆ ผๅผๆ ่ฎฐ + ็ๆฌ + manifest๏ผid/name/ไฝ่
/่ฒ็ณป/accent/tokens๏ผใๅฏ**ๅฏผๅ
ฅๆไปถ**ใ**ไธ้ฎๅบ็จ**ใ**ๅคๅถๅไบซ้พๆฅ**๏ผ็ผ็ ่ฟ URL hash๏ผ |
|
|
70
|
-
| ๐ **ๆฏ็จๆทๅผบ่ฐ่ฒ Accent** | ไธบๅฝๅ็ฎ่คๅ ๅ ไธไธช่ชๅฎไนๅ็ๅผบ่ฐ่ฒ๏ผ`overrideTokens`
|
|
71
|
-
| ๐ผ๏ธ **ๅฃ็บธ 2.0** |
|
|
87
|
+
| ๐ **ๆฏ็จๆทๅผบ่ฐ่ฒ Accent** | ไธบๅฝๅ็ฎ่คๅ ๅ ไธไธช่ชๅฎไนๅ็ๅผบ่ฐ่ฒ๏ผ`overrideTokens` ๅฑ๏ผไธๅจ็ฎ่คๆฌ่บซ๏ผ๏ผ**12 ไธชๅ
ธๅ่ฒๅไธ้ฎ้่ฒ** + ้่ฒ็ + ้ๆบ + ๆขๅคไธป้ข่ฒ |
|
|
88
|
+
| ๐ผ๏ธ **ๅฃ็บธ 2.0** | ๆฌๅฐๅพ / **ๅพ็ URL** / **ๆธๅ้ข่ฎพ**๏ผๆฏๅฅ็ฎ่ค**่ชๅจๅปบ่ฎฎ**ไธๅผ ๆธๅ๏ผๅฏ**่ชๅจๅผฑๅ**๏ผ่็ฆไปปๅกๆถ้ไฝๅนฒๆฐ๏ผ๏ผ**ๆ่ฟไฝฟ็จ**๏ผๆๅค 5 ๅผ ๏ผไธ้ฎๆขๅ |
|
|
72
89
|
| ๐งฉ **ๆฌๅฐไธป้ขๅ
ๅบ** | ๆๆๅ
็ฝฎ็ฎ่ค + ๅฏผๅ
ฅ็่ชๅฎไนๅ
้ไธญๅฑ็คบ๏ผ**ๅบ็จ / ๆถ่** ไธ้ฎๅฎๆ |
|
|
90
|
+
| โ
**ๆธ
ๆฐ้ไธญๅ้ฆ** | ๅๆข็ฎ่คๆถ้ไธญๆ๏ผโ + ่พนๆก๏ผ**ๅณๆถ่ท้**๏ผไธๅๆฎ็ๆจก็ณ็็ฝ่ฒ้ซไบฎๆก |
|
|
73
91
|
| ๐ฒ **ๆขไธไธช่ฏ่ฏ๏ผsurprise me๏ผ** | ้ๆบๆไธไธชๅไฝ ๅฝๅไธๅ็ไธป้ข |
|
|
74
92
|
| โญ **ๆถ่** | ๆถ่ๅๆฌข็็ฎ่ค๏ผๅฟซ้ๅๆข |
|
|
75
93
|
| โ
**ๆ ก้ช + ๅๆป** | ๅฏผๅ
ฅๆถไผๆ ก้ชๆ ผๅผ/ๅฟ
ๅกซ token/้ข่ฒๅๆณๆง๏ผๅคฑ่ดฅๆ็งป้คๆถๅฎๅ
จๅ้๏ผไธๅ็ ดๅๆงๆดๆน |
|
|
@@ -90,7 +108,7 @@ DeepSeek Harness ็ๅฃๅทๆฏใไธๅ็ๆไปถใ๏ผๆจกๅใๅทฅๅ
ทใๆฒ็ฎฑใ
|
|
|
90
108
|
|
|
91
109
|
- **ๅฎ่ฃ
ๅฝไปค = ๅฎๆนๅฏไธๅฎ่ฃ
ๅฝไปค**๏ผ`dsh plugin --profile web add dsh-dream-skin`
|
|
92
110
|
- **่ฐ็จ็ๆฏๅฎๆนๆฉๅฑ็น**๏ผ`ctx.theme`๏ผๆณจๅไธป้ข๏ผใ`ctx.theme.overrideTokens`๏ผๅ ๅ ๅฑ๏ผใ
|
|
93
|
-
`ctx.slots`๏ผๆ UI
|
|
111
|
+
`ctx.slots`๏ผๆ UI ๆ่ฟ็ฌ็ซ็ **่ฎพ็ฝฎ โ ๅค่ง / Theme** ๅ่๏ผใ
|
|
94
112
|
- **manifest ๅฅ็บฆไธๅฎๆนไธ่ด**๏ผ`dsh.bundle` + `dsh.client` + `exports["./client"]`ใ
|
|
95
113
|
|
|
96
114
|
ไนๅฐฑๆฏ่ฏด๏ผ**ไฝ ่ฃ
็ไธๆฏไธไธชๆ้จๅทฆ้็่ๆฌ๏ผ่ๆฏ DSH ๅฎๆนๆไปถไฝ็ณป้็ๆ ๅ็ฎ่คๆไปถใ**
|
|
@@ -134,7 +152,7 @@ DeepSeek Harness ็ๅฃๅทๆฏใไธๅ็ๆไปถใ๏ผๆจกๅใๅทฅๅ
ทใๆฒ็ฎฑใ
|
|
|
134
152
|
dsh plugin --profile web add dsh-dream-skin
|
|
135
153
|
# 2. ้ๅฏ
|
|
136
154
|
dsh web
|
|
137
|
-
# 3. ๆๅผ ่ฎพ็ฝฎ โ
|
|
155
|
+
# 3. ๆๅผ ่ฎพ็ฝฎ โ ๅค่ง๏ผTheme๏ผโ ็ฎ่ค๏ผๆไธๅฅ โ ๅฎใ
|
|
138
156
|
```
|
|
139
157
|
|
|
140
158
|
> ่ฃ
็ๆฏ npm ๅทฒๅฎๆๅๅธ็ๆญฃๅผๅ
๏ผๆ ้ cloneใ่ฅ `dsh plugin add` ๆฅ workspace ็ธๅ
ณ้่ฏฏ๏ผ่กฅไธไธช `-w` ๅณๅฏใ
|
|
@@ -154,7 +172,7 @@ dsh plugin --profile web add dsh-dream-skin
|
|
|
154
172
|
dsh web
|
|
155
173
|
```
|
|
156
174
|
|
|
157
|
-
ๆๅผ **่ฎพ็ฝฎ โ
|
|
175
|
+
ๆๅผ **่ฎพ็ฝฎ โ ๅค่ง๏ผTheme๏ผ**๏ผๅณๅฏ็ๅฐใ็ฎ่คใใๅผบ่ฐ่ฒใใ่ๆฏๅพ็ / ้ซ็บงๅฃ็บธใไธใไธป้ขๅ
ใ็ญ่กใ
|
|
158
176
|
|
|
159
177
|
> `-w` ๆ ๅฟๅจ่ฃธ `add` ๆถๅฟ
้๏ผๆฏไธช profile ่ชๅธฆ `pnpm-workspace.yaml`๏ผpnpm ไผๆๅฎๅฝไฝ workspace ๆ น๏ผ่ฃธๅ ๆฅ้
|
|
160
178
|
> `ERR_PNPM_ADDING_TO_ROOT`ใ่ฅๅทฒๅ ่ฟ `-w`๏ผๅ็ปญ็จ็ฐๆ workspace ๅณๆ ้้ๅคใ
|
|
@@ -165,6 +183,25 @@ dsh web
|
|
|
165
183
|
dsh plugin --profile web add -w /path/to/dsh-dream-skin
|
|
166
184
|
```
|
|
167
185
|
|
|
186
|
+
## ๐ ๆดๆฐ / ๅธ่ฝฝ
|
|
187
|
+
|
|
188
|
+
**ๆดๆฐๅฐๆๆฐ็**๏ผ่ฃ
็ๆฏ npm ๆญฃๅผๅ
ๆถ๏ผ๏ผ
|
|
189
|
+
|
|
190
|
+
```sh
|
|
191
|
+
dsh plugin --profile web update dsh-dream-skin
|
|
192
|
+
dsh web # ้ๅฏ็ๆ
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
> ่ฅๆดๆฐๅไปๆพ็คบๆง็ๆฌ๏ผๅฏ่ฝๆฏ pnpm ็ๆๅฐๅๅธๅนด้พ๏ผsupply-chain๏ผ็ญ็ฅๆกไฝไบๅๅๅธ็ๆฐ็ๆฌ๏ผ
|
|
196
|
+
> ๅจ profile ็ฎๅฝๆง่ก `pnpm add dsh-dream-skin@latest --config.minimumReleaseAge=0` ๅณๅฏ็ป่ฟใ
|
|
197
|
+
|
|
198
|
+
**ๅธ่ฝฝ**๏ผ
|
|
199
|
+
|
|
200
|
+
```sh
|
|
201
|
+
dsh plugin --profile web remove dsh-dream-skin
|
|
202
|
+
dsh web # ้ๅฏๅๆขๅคๅฎๆนๅค่ง
|
|
203
|
+
```
|
|
204
|
+
|
|
168
205
|
## ๐งฉ ๅ
ผๅฎนๆง
|
|
169
206
|
|
|
170
207
|
| ้กน | ๅผ |
|
|
@@ -226,6 +263,8 @@ bundle๏ผ`@deepseek-ai/dsh-client-runtime/client`ใโฆ๏ผใ
|
|
|
226
263
|
ๅฎๅณ่ชๅจๅบ็ฐๅจ่ฎพ็ฝฎ้๏ผ่ฎฐๅพๅจ `zh` / `en` ่ฏๅ
ธ่กฅ `skin.<id>` ๆๆกใ
|
|
227
264
|
- **ๅไธไธชไธป้ขๅ
๏ผๆจ่ๅๅๆนๅผ๏ผ**๏ผๅ่ [`docs/examples/sample-theme-pack.json`](./docs/examples/sample-theme-pack.json)๏ผ
|
|
228
265
|
ไธไธช `*.dsh-theme.json` ๅณๅฏๅจ่ฎพ็ฝฎ้ๅฏผๅ
ฅๆ้่ฟๅไบซ้พๆฅๅๅ็ปๅซไบบ๏ผๆ ้ๆนไปฃ็ ใ
|
|
266
|
+
- **ๆพไฝ ่ชๅทฑ็ๅฃ็บธ**๏ผๆๅพ็ไธข่ฟ [`wallpapers/`](./wallpapers/)๏ผๆณจๆๅชๅจไฝ ๆๆ้็ๅๆไธๅๅ๏ผ๏ผๅๅจ
|
|
267
|
+
DSH ็ใ่ๆฏๅพ็ใ้ๅฏผๅ
ฅๅณๅฏใ
|
|
229
268
|
- **่ทๆ ก้ช**๏ผ`npm test`๏ผVM ๅ็ๆต่ฏ๏ผ่ฆ็ factory ๆฑๅผใ`apply` ๆ่ฝฝใไธป้ขๅ
ๅฏผๅ
ฅ/ๆไน
ๅ๏ผใ
|
|
230
269
|
- **ๆข้
่ฒ**๏ผๅ่ `--dsw-alias-*` ไปค็๏ผๅฎๆดๅฅ็บฆ่ง [`docs/themes-spec.md`](./docs/themes-spec.md)๏ผใ
|
|
231
270
|
|
|
@@ -245,6 +284,11 @@ bundle๏ผ`@deepseek-ai/dsh-client-runtime/client`ใโฆ๏ผใ
|
|
|
245
284
|
|
|
246
285
|
ๆฌข่ฟๆไบค Issue ไธ PR๏ผ่ฏทๅ
้
่ฏป [่ดก็ฎๆๅ](./CONTRIBUTING.md)๏ผๅนถ้ตๅพช [Code of Conduct](./CODE_OF_CONDUCT.md)ใ
|
|
247
286
|
|
|
287
|
+
## โญ ๆฏๆ่ฟไธช้กน็ฎ
|
|
288
|
+
|
|
289
|
+
ๅๆฌข็่ฏ๏ผ็ปไปๅบ็นไธช **Star โญ**ใๅจ npm ไธ็นไธช **๐**๏ผๆๆๅฎ่ฝฌๅ็ปไฝ ็ DSH ๆๅโโ่ฟไผ่ฎฉๆดๅคไบบๅ็ฐๅฎ๏ผ
|
|
290
|
+
ไน่ฝๆฟๅฑๆ็ปญ็ปดๆคใๆณไธ่ตทๅไธป้ขๅบ / ๅจ็บฟ Studio / ๆดๅคไธป้ข๏ผๆฌข่ฟๆฅ่ดก็ฎใ
|
|
291
|
+
|
|
248
292
|
## ๐ ๅฎๅ
จ
|
|
249
293
|
|
|
250
294
|
ๅ็ฐๅฎๅ
จ้ฎ้ข๏ผ่ฏทๅฟ็ดๆฅๅผๅ
ฌๅผ Issueโโๅ่ง [ๅฎๅ
จ็ญ็ฅ](./SECURITY.md)ใ
|
package/lib/client.js
CHANGED
|
@@ -351,6 +351,7 @@ window.__ModuleLoader__.load({
|
|
|
351
351
|
"background.history": "ๆ่ฟไฝฟ็จ",
|
|
352
352
|
"background.historyApply": "็นๅปๆขๅ่ฟๅผ ๅฃ็บธ",
|
|
353
353
|
"accent.title": "ๅผบ่ฐ่ฒ๏ผAccent๏ผ",
|
|
354
|
+
"accent.pick": "้่ฒโฆ",
|
|
354
355
|
"accent.random": "้ๆบ",
|
|
355
356
|
"accent.clear": "ๆขๅคไธป้ข่ฒ",
|
|
356
357
|
"accent.hint": "ไธบๅฝๅ็ฎ่ค่ฎพ็ฝฎไธไธช่ชๅฎไนๅผบ่ฐ่ฒ๏ผๅ ๅ ๅฑ๏ผไธๅฝฑๅ็ฎ่คๆฌ่บซ๏ผ๏ผ็นใๆขๅคไธป้ข่ฒใๅๅฐ็ฎ่ค้ป่ฎคๅผบ่ฐ่ฒ",
|
|
@@ -390,6 +391,7 @@ window.__ModuleLoader__.load({
|
|
|
390
391
|
"background.history": "Recent",
|
|
391
392
|
"background.historyApply": "Click to switch back",
|
|
392
393
|
"accent.title": "Accent",
|
|
394
|
+
"accent.pick": "Pickโฆ",
|
|
393
395
|
"accent.random": "Random",
|
|
394
396
|
"accent.clear": "Reset to theme",
|
|
395
397
|
"accent.hint": "Set a custom accent color for the active skin (an override layer โ the skin itself is untouched). Reset to return to the skin's default accent.",
|
|
@@ -647,6 +649,11 @@ window.__ModuleLoader__.load({
|
|
|
647
649
|
gap: "10px",
|
|
648
650
|
padding: "16px 0"
|
|
649
651
|
},
|
|
652
|
+
section: {
|
|
653
|
+
display: "flex",
|
|
654
|
+
flexDirection: "column",
|
|
655
|
+
width: "100%"
|
|
656
|
+
},
|
|
650
657
|
title: {
|
|
651
658
|
color: "var(--dsw-alias-label-primary)",
|
|
652
659
|
fontSize: "14px",
|
|
@@ -671,15 +678,16 @@ window.__ModuleLoader__.load({
|
|
|
671
678
|
width: "96px",
|
|
672
679
|
padding: "3px",
|
|
673
680
|
borderRadius: "10px",
|
|
674
|
-
border: "2px solid transparent",
|
|
675
681
|
background: "transparent",
|
|
682
|
+
border: "none",
|
|
676
683
|
cursor: "pointer",
|
|
677
684
|
font: "inherit",
|
|
678
685
|
boxSizing: "border-box",
|
|
679
|
-
position: "relative"
|
|
686
|
+
position: "relative",
|
|
687
|
+
outline: "none"
|
|
680
688
|
},
|
|
681
689
|
cardSelected: {
|
|
682
|
-
|
|
690
|
+
boxShadow: "0 0 0 2px var(--dsw-alias-brand-primary)",
|
|
683
691
|
background: "rgba(127, 127, 127, 0.10)"
|
|
684
692
|
},
|
|
685
693
|
cardCheck: {
|
|
@@ -801,6 +809,20 @@ window.__ModuleLoader__.load({
|
|
|
801
809
|
padding: 0,
|
|
802
810
|
boxSizing: "border-box"
|
|
803
811
|
},
|
|
812
|
+
accentDot: {
|
|
813
|
+
width: "22px",
|
|
814
|
+
height: "22px",
|
|
815
|
+
borderRadius: "50%",
|
|
816
|
+
border: "1px solid var(--dsw-alias-border-l2)",
|
|
817
|
+
boxSizing: "border-box",
|
|
818
|
+
flex: "none"
|
|
819
|
+
},
|
|
820
|
+
accentHex: {
|
|
821
|
+
color: "var(--dsw-alias-label-secondary)",
|
|
822
|
+
fontSize: "13px",
|
|
823
|
+
lineHeight: "20px",
|
|
824
|
+
fontFamily: "ui-monospace, monospace"
|
|
825
|
+
},
|
|
804
826
|
checkbox: {
|
|
805
827
|
accentColor: "var(--dsw-alias-brand-primary)",
|
|
806
828
|
width: "16px",
|
|
@@ -1853,6 +1875,7 @@ window.__ModuleLoader__.load({
|
|
|
1853
1875
|
const base = useStore((s) => s.base);
|
|
1854
1876
|
const activeValue = accent !== DEFAULT_ACCENT ? accent : base;
|
|
1855
1877
|
const inputValue = normalizeHex(activeValue) || "#4f83f2";
|
|
1878
|
+
const accentPickerRef = (0, _react.useRef)(null);
|
|
1856
1879
|
return (0, react_jsx_runtime.jsxs)("div", {
|
|
1857
1880
|
style: styles.group,
|
|
1858
1881
|
children: [
|
|
@@ -1863,10 +1886,27 @@ window.__ModuleLoader__.load({
|
|
|
1863
1886
|
(0, react_jsx_runtime.jsxs)("div", {
|
|
1864
1887
|
style: styles.actionRow,
|
|
1865
1888
|
children: [
|
|
1889
|
+
(0, react_jsx_runtime.jsx)("span", {
|
|
1890
|
+
style: { ...styles.accentDot, background: inputValue },
|
|
1891
|
+
children: null
|
|
1892
|
+
}),
|
|
1893
|
+
(0, react_jsx_runtime.jsx)("span", {
|
|
1894
|
+
style: styles.accentHex,
|
|
1895
|
+
children: inputValue
|
|
1896
|
+
}),
|
|
1897
|
+
(0, react_jsx_runtime.jsx)("button", {
|
|
1898
|
+
type: "button",
|
|
1899
|
+
style: styles.button,
|
|
1900
|
+
onClick: () => {
|
|
1901
|
+
if (accentPickerRef.current) accentPickerRef.current.click();
|
|
1902
|
+
},
|
|
1903
|
+
children: t("accent.pick")
|
|
1904
|
+
}),
|
|
1866
1905
|
(0, react_jsx_runtime.jsx)("input", {
|
|
1906
|
+
ref: accentPickerRef,
|
|
1867
1907
|
type: "color",
|
|
1868
1908
|
value: inputValue,
|
|
1869
|
-
style: {
|
|
1909
|
+
style: { display: "none" },
|
|
1870
1910
|
onChange: (event) => setAccent(event.target.value)
|
|
1871
1911
|
}),
|
|
1872
1912
|
(0, react_jsx_runtime.jsx)("button", {
|
|
@@ -2045,6 +2085,21 @@ window.__ModuleLoader__.load({
|
|
|
2045
2085
|
});
|
|
2046
2086
|
}
|
|
2047
2087
|
//#endregion
|
|
2088
|
+
|
|
2089
|
+
//#region dsh-dream-skin: Appearance settings section
|
|
2090
|
+
/**
|
|
2091
|
+
* A dedicated "Theme / ๅค่ง" settings section. Hosts the skin, wallpaper,
|
|
2092
|
+
* advanced wallpaper, accent and theme-pack rows โ instead of flat rows in
|
|
2093
|
+
* the General section, they live under their own category in the settings
|
|
2094
|
+
* left nav.
|
|
2095
|
+
*/
|
|
2096
|
+
function DreamSkinSection({ renderSlot }) {
|
|
2097
|
+
return (0, react_jsx_runtime.jsx)("div", {
|
|
2098
|
+
style: styles.section,
|
|
2099
|
+
children: renderSlot("settings.dreamSkin.item", {})
|
|
2100
|
+
});
|
|
2101
|
+
}
|
|
2102
|
+
//#endregion
|
|
2048
2103
|
//#region dsh-dream-skin: client plugin body
|
|
2049
2104
|
/**
|
|
2050
2105
|
* Required services: theme runtime (skins, switching, token override
|
|
@@ -2108,8 +2163,18 @@ window.__ModuleLoader__.load({
|
|
|
2108
2163
|
|
|
2109
2164
|
const skinStore = createSkinStore();
|
|
2110
2165
|
let skinBound;
|
|
2166
|
+
// Monotonic revision for the skin slot store. Using a locally incrementing
|
|
2167
|
+
// counter (instead of the host theme revision) guarantees the store ALWAYS
|
|
2168
|
+
// updates on every click โ even if theme/change timing races or the host
|
|
2169
|
+
// revision doesn't bump as expected โ so the selected card follows instantly.
|
|
2170
|
+
let skinRevision = 0;
|
|
2171
|
+
const syncSkinWith = (id) => {
|
|
2172
|
+
skinBound?.sync(id, ++skinRevision);
|
|
2173
|
+
// A skin/scheme switch changes the base color; re-shade the wash.
|
|
2174
|
+
if (wallpaperBackgroundCss() !== null) applyWallpaper2(ctx);
|
|
2175
|
+
};
|
|
2111
2176
|
const syncSkin = (snapshot) => {
|
|
2112
|
-
skinBound?.sync(snapshot.preference,
|
|
2177
|
+
skinBound?.sync(snapshot.preference, ++skinRevision);
|
|
2113
2178
|
// A skin/scheme switch changes the base color; re-shade the wash.
|
|
2114
2179
|
if (wallpaperBackgroundCss() !== null) applyWallpaper2(ctx);
|
|
2115
2180
|
};
|
|
@@ -2130,13 +2195,27 @@ window.__ModuleLoader__.load({
|
|
|
2130
2195
|
// Deterministically push the new preference into the slot store AND
|
|
2131
2196
|
// re-shade the wallpaper so the selected card follows immediately,
|
|
2132
2197
|
// independent of theme/change emission timing.
|
|
2133
|
-
|
|
2134
|
-
if (wallpaperBackgroundCss() !== null) applyWallpaper2(ctx);
|
|
2198
|
+
syncSkinWith(id);
|
|
2135
2199
|
}
|
|
2136
2200
|
};
|
|
2137
2201
|
};
|
|
2138
|
-
|
|
2139
|
-
|
|
2202
|
+
// Register our own "Theme / ๅค่ง" settings section. It appears in the
|
|
2203
|
+
// settings left-nav and hosts all skin features (skin, wallpaper,
|
|
2204
|
+
// advanced wallpaper, accent, theme packs) under a single category.
|
|
2205
|
+
ctx.slots.inject("settings.section", () => ctx.slots.register({
|
|
2206
|
+
name: "settings.section",
|
|
2207
|
+
id: "dream-skin",
|
|
2208
|
+
order: 10,
|
|
2209
|
+
label: "Theme / ๅค่ง",
|
|
2210
|
+
locale: SETTINGS_NS,
|
|
2211
|
+
children: { "settings.dreamSkin.item": {
|
|
2212
|
+
kind: "list",
|
|
2213
|
+
scope: "root"
|
|
2214
|
+
} }
|
|
2215
|
+
}, DreamSkinSection));
|
|
2216
|
+
|
|
2217
|
+
ctx.slots.inject("settings.dreamSkin.item", () => ctx.slots.register({
|
|
2218
|
+
name: "settings.dreamSkin.item",
|
|
2140
2219
|
id: "dream-skin",
|
|
2141
2220
|
order: 20,
|
|
2142
2221
|
store: skinStore,
|
|
@@ -2190,8 +2269,8 @@ window.__ModuleLoader__.load({
|
|
|
2190
2269
|
}
|
|
2191
2270
|
};
|
|
2192
2271
|
};
|
|
2193
|
-
ctx.slots.inject("settings.
|
|
2194
|
-
name: "settings.
|
|
2272
|
+
ctx.slots.inject("settings.dreamSkin.item", () => ctx.slots.register({
|
|
2273
|
+
name: "settings.dreamSkin.item",
|
|
2195
2274
|
id: "dream-skin-wallpaper",
|
|
2196
2275
|
order: 30,
|
|
2197
2276
|
store: wallpaperStore,
|
|
@@ -2241,8 +2320,8 @@ window.__ModuleLoader__.load({
|
|
|
2241
2320
|
}
|
|
2242
2321
|
};
|
|
2243
2322
|
};
|
|
2244
|
-
ctx.slots.inject("settings.
|
|
2245
|
-
name: "settings.
|
|
2323
|
+
ctx.slots.inject("settings.dreamSkin.item", () => ctx.slots.register({
|
|
2324
|
+
name: "settings.dreamSkin.item",
|
|
2246
2325
|
id: "dream-skin-wallpaper-advanced",
|
|
2247
2326
|
order: 31,
|
|
2248
2327
|
store: advWallpaperStore,
|
|
@@ -2277,8 +2356,8 @@ window.__ModuleLoader__.load({
|
|
|
2277
2356
|
}
|
|
2278
2357
|
};
|
|
2279
2358
|
};
|
|
2280
|
-
ctx.slots.inject("settings.
|
|
2281
|
-
name: "settings.
|
|
2359
|
+
ctx.slots.inject("settings.dreamSkin.item", () => ctx.slots.register({
|
|
2360
|
+
name: "settings.dreamSkin.item",
|
|
2282
2361
|
id: "dream-skin-accent",
|
|
2283
2362
|
order: 25,
|
|
2284
2363
|
store: accentStore,
|
|
@@ -2319,8 +2398,8 @@ window.__ModuleLoader__.load({
|
|
|
2319
2398
|
surprise: refreshSurprise
|
|
2320
2399
|
};
|
|
2321
2400
|
};
|
|
2322
|
-
ctx.slots.inject("settings.
|
|
2323
|
-
name: "settings.
|
|
2401
|
+
ctx.slots.inject("settings.dreamSkin.item", () => ctx.slots.register({
|
|
2402
|
+
name: "settings.dreamSkin.item",
|
|
2324
2403
|
id: "dream-skin-packs",
|
|
2325
2404
|
order: 40,
|
|
2326
2405
|
store: packStore,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-dream-skin",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.4",
|
|
4
4
|
"description": "DeepSeek Harness ๆข่คๆไปถ (Dream Skin for DeepSeek Harness): curated --dsw-alias-* theme presets, a custom translucent wallpaper with opacity/blur controls, theme-pack import/export + share links, per-user accent, favorites & surprise-me, and durable per-browser persistence โ in the spirit of the Codex Dream Skin project.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|