twskin 0.5.6 → 0.5.8

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/CHANGELOG.md CHANGED
@@ -5,6 +5,46 @@ All notable changes to this package are documented here. This project follows
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [0.5.8] - 2026-07-29
9
+
10
+ ### Fixed
11
+
12
+ - Restored reliable reading contrast in `墨`, `极光`, `雾林`, `深海`, `樱夜`,
13
+ and `日落`. Their dark artwork now activates TRAE's dark appearance contract
14
+ and uses dark, opaque-enough working surfaces instead of pale panels over a
15
+ dark background.
16
+
17
+ ### Changed
18
+
19
+ - Rebuilt the six monochrome-gradient theme backgrounds with their own visual
20
+ grammar: ink texture, aurora ribbons, mist layers, ocean currents, night
21
+ blossom branches, and sunset dunes.
22
+ - Bumped the six updated theme packages to `1.1.0` and added complete semantic
23
+ tokens for chat, menus, settings, focus, scrollbars, and the embedded
24
+ workbench.
25
+
26
+ ### For contributors
27
+
28
+ - Added release coverage that keeps dark-art themes on the dark appearance
29
+ contract with complete panel and interaction roles.
30
+
31
+ ## [0.5.7] - 2026-07-29
32
+
33
+ ### Fixed
34
+
35
+ - Prevented theme artwork from bleeding through right-side working content by
36
+ making layout-surface ownership a runtime contract. The main workspace now
37
+ retains its declared surface color, opacity, and blur beneath Markdown,
38
+ Task Summary, and Code/Design content.
39
+ - Updated `Solvay 1927 · Solarized Light` to theme version `1.0.4`, restoring
40
+ a readable warm-paper surface in the right workspace and Monaco editor.
41
+
42
+ ### Changed
43
+
44
+ - Added catalog validation that rejects official theme CSS which overrides a
45
+ runtime-owned layout surface directly; themes use surface-decoration
46
+ variables for optional texture instead.
47
+
8
48
  ## [0.5.6] - 2026-07-27
9
49
 
10
50
  ### Changed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "twskin",
3
- "version": "0.5.6",
3
+ "version": "0.5.8",
4
4
  "description": "An unofficial community theme manager and CLI for TRAE Work on macOS.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -16,7 +16,7 @@ import { spawnSync } from "node:child_process";
16
16
  import { fileURLToPath } from "node:url";
17
17
 
18
18
  const ROOT = path.dirname(fileURLToPath(import.meta.url));
19
- const VERSION = "0.5.6";
19
+ const VERSION = "0.5.7";
20
20
  const DATA_DIR = process.env.TWSKIN_DATA_DIR || path.join(os.homedir(), ".trae-work-skin");
21
21
 
22
22
  function parseArgs(argv) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "packageVersion": "0.5.6",
3
+ "packageVersion": "0.5.8",
4
4
  "themesBundled": false,
5
5
  "files": [
6
6
  {
@@ -11,7 +11,7 @@
11
11
  {
12
12
  "path": "injector.mjs",
13
13
  "size": 31308,
14
- "sha256": "4256fcebb123657be1ba2968dae6d3904f54618d120e7d9f62b02796fcdebed0"
14
+ "sha256": "b1ea0108ab8e4449bb509de458705e0019cad3d342fb1ef9fcd8ec98c890bf79"
15
15
  },
16
16
  {
17
17
  "path": "restore.sh",
@@ -30,8 +30,8 @@
30
30
  },
31
31
  {
32
32
  "path": "styles/base.css",
33
- "size": 32439,
34
- "sha256": "cfd57424d2b31732a44e0dd59410ab039d9842017112e6bd688a37db4831262a"
33
+ "size": 33535,
34
+ "sha256": "0356d33f4197461e325eb563471219064ded7cc75e835c28de6dbedb919c2a05"
35
35
  },
36
36
  {
37
37
  "path": "styles/manager.css",
@@ -73,10 +73,12 @@ body.trae-skin-v2 {
73
73
  }
74
74
  body.trae-skin-v2 .task-list-panel {
75
75
  background-color: var(--trae-skin-left-surface) !important;
76
- background-image: var(--trae-skin-left-art-layer, none) !important;
77
- background-position: center, var(--trae-skin-left-art-position, center) !important;
78
- background-size: cover, var(--trae-skin-left-art-size, cover) !important;
79
- background-repeat: no-repeat !important;
76
+ background-image:
77
+ var(--trae-skin-left-decoration, none),
78
+ var(--trae-skin-left-art-layer, none) !important;
79
+ background-position: var(--trae-skin-left-decoration-position, center), center, var(--trae-skin-left-art-position, center) !important;
80
+ background-size: var(--trae-skin-left-decoration-size, 100% 100%), 100% 100%, var(--trae-skin-left-art-size, cover) !important;
81
+ background-repeat: var(--trae-skin-left-decoration-repeat, no-repeat), no-repeat, no-repeat !important;
80
82
  border-right: 1px solid var(--trae-skin-divider) !important;
81
83
  backdrop-filter:
82
84
  blur(var(--trae-skin-left-blur))
@@ -86,7 +88,11 @@ body.trae-skin-v2 .task-list-panel {
86
88
  saturate(var(--trae-skin-left-saturation)) !important;
87
89
  }
88
90
  body.trae-skin-v2 .solo-lite-chat-panel-container {
89
- background: var(--trae-skin-chat-surface) !important;
91
+ background-color: var(--trae-skin-chat-surface) !important;
92
+ background-image: var(--trae-skin-chat-decoration, none) !important;
93
+ background-position: var(--trae-skin-chat-decoration-position, center) !important;
94
+ background-size: var(--trae-skin-chat-decoration-size, 100% 100%) !important;
95
+ background-repeat: var(--trae-skin-chat-decoration-repeat, no-repeat) !important;
90
96
  border-right: 1px solid var(--trae-skin-divider) !important;
91
97
  backdrop-filter:
92
98
  blur(var(--trae-skin-chat-blur))
@@ -97,10 +103,12 @@ body.trae-skin-v2 .solo-lite-chat-panel-container {
97
103
  }
98
104
  body.trae-skin-v2 .solo-lite-main-area {
99
105
  background-color: var(--trae-skin-main-surface) !important;
100
- background-image: var(--trae-skin-right-art-layer, none) !important;
101
- background-position: center, var(--trae-skin-right-art-position, right center) !important;
102
- background-size: cover, var(--trae-skin-right-art-size, auto 100%) !important;
103
- background-repeat: no-repeat !important;
106
+ background-image:
107
+ var(--trae-skin-main-decoration, none),
108
+ var(--trae-skin-right-art-layer, none) !important;
109
+ background-position: var(--trae-skin-main-decoration-position, center), center, var(--trae-skin-right-art-position, right center) !important;
110
+ background-size: var(--trae-skin-main-decoration-size, 100% 100%), 100% 100%, var(--trae-skin-right-art-size, auto 100%) !important;
111
+ background-repeat: var(--trae-skin-main-decoration-repeat, no-repeat), no-repeat, no-repeat !important;
104
112
  backdrop-filter:
105
113
  blur(var(--trae-skin-main-blur))
106
114
  saturate(var(--trae-skin-main-saturation)) !important;
@@ -109,7 +117,11 @@ body.trae-skin-v2 .solo-lite-main-area {
109
117
  saturate(var(--trae-skin-main-saturation)) !important;
110
118
  }
111
119
  body.trae-skin-v2 .panel-container > .panel-content {
112
- background: var(--trae-skin-landing-surface) !important;
120
+ background-color: var(--trae-skin-landing-surface) !important;
121
+ background-image: var(--trae-skin-landing-decoration, none) !important;
122
+ background-position: var(--trae-skin-landing-decoration-position, center) !important;
123
+ background-size: var(--trae-skin-landing-decoration-size, 100% 100%) !important;
124
+ background-repeat: var(--trae-skin-landing-decoration-repeat, no-repeat) !important;
113
125
  backdrop-filter:
114
126
  blur(var(--trae-skin-landing-blur))
115
127
  saturate(var(--trae-skin-landing-saturation)) !important;