twskin 0.5.3 → 0.5.5
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 +25 -1
- package/README.md +10 -1
- package/dist/commands.d.ts +5 -0
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +42 -1
- package/dist/commands.js.map +1 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +4 -0
- package/dist/context.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +21 -1
- package/dist/main.js.map +1 -1
- package/dist/semver.d.ts +8 -0
- package/dist/semver.d.ts.map +1 -0
- package/dist/semver.js +35 -0
- package/dist/semver.js.map +1 -0
- package/dist/system.d.ts.map +1 -1
- package/dist/system.js +5 -1
- package/dist/system.js.map +1 -1
- package/dist/theme-catalog.d.ts +78 -0
- package/dist/theme-catalog.d.ts.map +1 -0
- package/dist/theme-catalog.js +324 -0
- package/dist/theme-catalog.js.map +1 -0
- package/dist/theme-download.d.ts +9 -1
- package/dist/theme-download.d.ts.map +1 -1
- package/dist/theme-download.js +36 -23
- package/dist/theme-download.js.map +1 -1
- package/dist/themes.d.ts.map +1 -1
- package/dist/themes.js +24 -2
- package/dist/themes.js.map +1 -1
- package/dist/types.d.ts +12 -0
- package/dist/types.d.ts.map +1 -1
- package/docs/publishing.md +1 -1
- package/docs/theme-distribution.md +19 -1
- package/package.json +2 -2
- package/runtime/injector.mjs +133 -1
- package/runtime/manifest.json +7 -7
- package/runtime/skin.js +112 -4
- package/runtime/styles/manager.css +37 -0
package/dist/themes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"themes.js","sourceRoot":"","sources":["../src/themes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"themes.js","sourceRoot":"","sources":["../src/themes.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -7,6 +7,10 @@ export interface CliPaths {
|
|
|
7
7
|
lockFile: string;
|
|
8
8
|
logFile: string;
|
|
9
9
|
runtimeManifest: string;
|
|
10
|
+
catalogCache: string;
|
|
11
|
+
catalogState: string;
|
|
12
|
+
themeUpdateSettings: string;
|
|
13
|
+
themeSyncState: string;
|
|
10
14
|
}
|
|
11
15
|
export interface AppContext {
|
|
12
16
|
bundle: string;
|
|
@@ -33,12 +37,19 @@ export interface CliOptions {
|
|
|
33
37
|
help: boolean;
|
|
34
38
|
}
|
|
35
39
|
export interface ThemeManifest extends Record<string, unknown> {
|
|
40
|
+
schemaVersion?: number;
|
|
36
41
|
id?: string;
|
|
42
|
+
version?: string;
|
|
43
|
+
engines?: {
|
|
44
|
+
twskin?: string;
|
|
45
|
+
};
|
|
37
46
|
name?: string;
|
|
38
47
|
desc?: string;
|
|
39
48
|
}
|
|
40
49
|
export interface ThemeDirectory {
|
|
41
50
|
id: string;
|
|
51
|
+
version: string;
|
|
52
|
+
compatibleCli: string | null;
|
|
42
53
|
name: string;
|
|
43
54
|
desc: string;
|
|
44
55
|
manifest: ThemeManifest;
|
|
@@ -51,6 +62,7 @@ export interface InstalledTheme extends ThemeDirectory {
|
|
|
51
62
|
}
|
|
52
63
|
export interface ThemeSummary {
|
|
53
64
|
id: string;
|
|
65
|
+
version: string;
|
|
54
66
|
name: string;
|
|
55
67
|
desc: string;
|
|
56
68
|
invalid?: boolean;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,KAAK,GAAG,YAAY,GAAG,MAAM,CAAC;AAEzE,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,KAAK,GAAG,YAAY,GAAG,MAAM,CAAC;AAEzE,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,YAAY,CAAC;IAC3B,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC1B,GAAG,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,aAAc,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,aAAa,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAe,SAAQ,cAAc;IACpD,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB"}
|
package/docs/publishing.md
CHANGED
|
@@ -20,7 +20,7 @@ This creates the current `twskin` version on npm. Verify it with:
|
|
|
20
20
|
|
|
21
21
|
```bash
|
|
22
22
|
npm view twskin version --registry=https://registry.npmjs.org
|
|
23
|
-
npm install --global twskin
|
|
23
|
+
npm install --global twskin@latest --registry=https://registry.npmjs.org
|
|
24
24
|
```
|
|
25
25
|
|
|
26
26
|
## Trusted publishing
|
|
@@ -27,6 +27,8 @@ twskin-themes.tar.gz
|
|
|
27
27
|
twskin-themes.sha256
|
|
28
28
|
twskin-themes-v<version>.tar.gz
|
|
29
29
|
twskin-themes-v<version>.sha256
|
|
30
|
+
twskin-catalog-v1.json
|
|
31
|
+
twskin-catalog-v1-v<version>.json
|
|
30
32
|
```
|
|
31
33
|
|
|
32
34
|
`twskin theme download [id]` downloads the fixed-name assets through GitHub's
|
|
@@ -35,16 +37,32 @@ API. The versioned copies remain available for archival and manual downloads.
|
|
|
35
37
|
With no ID, all themes are installed; with an ID, only that theme is installed.
|
|
36
38
|
The archive root contains `theme-pack.json` and `themes/<id>/` directories.
|
|
37
39
|
|
|
40
|
+
`twskin-catalog-v1.json` is uploaded after all theme assets. It contains the
|
|
41
|
+
release tag, a versioned package filename, size and SHA-256, plus each theme's
|
|
42
|
+
ID, SemVer version, schema version and compatible CLI range. Catalog sync
|
|
43
|
+
downloads the package from `releases/download/<release-tag>/`, never through the
|
|
44
|
+
mutable `latest/download` alias. The CLI caches it locally and uses `ETag`
|
|
45
|
+
conditional requests; the Theme Manager watcher checks at most once every six
|
|
46
|
+
hours. `twskin theme check` only checks the catalog, while
|
|
47
|
+
`twskin theme sync` downloads the pack only when compatible themes are new or
|
|
48
|
+
have a higher version. Automatic official-theme updates can be toggled with
|
|
49
|
+
`twskin theme auto-update on|off`.
|
|
50
|
+
|
|
38
51
|
The command limits metadata and archive sizes, uses a network timeout, verifies
|
|
39
52
|
SHA-256 before extraction, rejects absolute/traversal paths and link/special file
|
|
40
53
|
types, validates every theme manifest and performs an atomic directory swap with
|
|
41
54
|
rollback. It never changes the active theme implicitly.
|
|
42
55
|
|
|
43
56
|
For testing or an enterprise mirror, `TWSKIN_RELEASE_ASSET_BASE_URL` may point
|
|
44
|
-
to a directory containing the
|
|
57
|
+
to a directory containing the versioned asset names declared by the Catalog.
|
|
58
|
+
The legacy
|
|
45
59
|
`TWSKIN_RELEASE_API_URL` override remains available for a GitHub-compatible
|
|
46
60
|
latest-release JSON endpoint.
|
|
47
61
|
|
|
62
|
+
`TWSKIN_THEME_CATALOG_URL` can override the Catalog URL for tests or an
|
|
63
|
+
enterprise deployment. Its referenced package assets still resolve from
|
|
64
|
+
`TWSKIN_RELEASE_ASSET_BASE_URL`.
|
|
65
|
+
|
|
48
66
|
When GitHub's anonymous API quota is unavailable, set `TWSKIN_GITHUB_TOKEN`,
|
|
49
67
|
`GH_TOKEN`, or `GITHUB_TOKEN`. The CLI only sends that token to HTTPS requests
|
|
50
68
|
for `api.github.com` and `github.com`; it is never forwarded to a configured
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "twskin",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.5",
|
|
4
4
|
"description": "An unofficial community theme manager and CLI for TRAE Work on macOS.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"check": "npm run typecheck && node ./scripts/check-package.mjs",
|
|
31
31
|
"test": "npm run build && node --test \"test/*.test.mjs\"",
|
|
32
32
|
"build:themes": "npm run build && node ../../scripts/build-theme-pack.mjs",
|
|
33
|
-
"prepack": "npm run prepare:runtime && npm
|
|
33
|
+
"prepack": "npm run prepare:runtime && npm test && npm run check",
|
|
34
34
|
"pack:dry-run": "npm pack --dry-run"
|
|
35
35
|
},
|
|
36
36
|
"engines": {
|
package/runtime/injector.mjs
CHANGED
|
@@ -12,10 +12,11 @@
|
|
|
12
12
|
import fs from "node:fs";
|
|
13
13
|
import os from "node:os";
|
|
14
14
|
import path from "node:path";
|
|
15
|
+
import { spawnSync } from "node:child_process";
|
|
15
16
|
import { fileURLToPath } from "node:url";
|
|
16
17
|
|
|
17
18
|
const ROOT = path.dirname(fileURLToPath(import.meta.url));
|
|
18
|
-
const VERSION = "0.5.
|
|
19
|
+
const VERSION = "0.5.5";
|
|
19
20
|
const DATA_DIR = process.env.TWSKIN_DATA_DIR || path.join(os.homedir(), ".trae-work-skin");
|
|
20
21
|
|
|
21
22
|
function parseArgs(argv) {
|
|
@@ -61,6 +62,12 @@ const STATE_DIR = process.env.TWSKIN_STATE_DIR || path.join(DATA_DIR, "run");
|
|
|
61
62
|
const THEME_CONF = path.join(STATE_DIR, "theme.conf");
|
|
62
63
|
const PID_FILE = path.join(STATE_DIR, "injector.pid");
|
|
63
64
|
const MAX_THEME_CSS_BYTES = 1024 * 1024;
|
|
65
|
+
const DEFAULT_CATALOG_CHECK_INTERVAL_MS = 6 * 60 * 60 * 1000;
|
|
66
|
+
|
|
67
|
+
function catalogCheckIntervalMs() {
|
|
68
|
+
const configured = Number(process.env.TWSKIN_CATALOG_CHECK_INTERVAL_MS || DEFAULT_CATALOG_CHECK_INTERVAL_MS);
|
|
69
|
+
return Number.isFinite(configured) && configured >= 0 ? configured : DEFAULT_CATALOG_CHECK_INTERVAL_MS;
|
|
70
|
+
}
|
|
64
71
|
|
|
65
72
|
function buildCatalog(themesDir) {
|
|
66
73
|
const catalog = [];
|
|
@@ -139,6 +146,7 @@ function buildCatalog(themesDir) {
|
|
|
139
146
|
}
|
|
140
147
|
catalog.push({
|
|
141
148
|
id: String(meta.id),
|
|
149
|
+
version: typeof meta.version === "string" ? meta.version : "0.0.0",
|
|
142
150
|
name: String(meta.name),
|
|
143
151
|
desc: String(meta.desc || ""),
|
|
144
152
|
category: String(meta.category || "其他"),
|
|
@@ -154,6 +162,14 @@ function buildCatalog(themesDir) {
|
|
|
154
162
|
return catalog;
|
|
155
163
|
}
|
|
156
164
|
|
|
165
|
+
function readThemeSyncState() {
|
|
166
|
+
try {
|
|
167
|
+
const parsed = JSON.parse(fs.readFileSync(path.join(STATE_DIR, "theme-sync-state.json"), "utf8"));
|
|
168
|
+
if (parsed && parsed.schemaVersion === 1 && typeof parsed.phase === "string") return parsed;
|
|
169
|
+
} catch {}
|
|
170
|
+
return { schemaVersion: 1, phase: "idle", autoUpdateThemes: true, updateCount: 0, newThemes: 0, updatedThemes: 0, incompatibleThemes: 0 };
|
|
171
|
+
}
|
|
172
|
+
|
|
157
173
|
function readThemeConf() {
|
|
158
174
|
try { return fs.readFileSync(THEME_CONF, "utf8").trim() || null; } catch { return null; }
|
|
159
175
|
}
|
|
@@ -180,6 +196,7 @@ export function buildPayload(args) {
|
|
|
180
196
|
.replaceAll("__BASE_CSS__", () => JSON.stringify(baseCss))
|
|
181
197
|
.replaceAll("__MANAGER_CSS__", () => JSON.stringify(managerCss))
|
|
182
198
|
.replaceAll("__CATALOG__", () => JSON.stringify(catalog))
|
|
199
|
+
.replaceAll("__THEME_SYNC_STATE__", () => JSON.stringify(readThemeSyncState()))
|
|
183
200
|
.replaceAll("__DEFAULT_THEME__", () => JSON.stringify(resolveDefaultTheme(catalog, args.defaultTheme)))
|
|
184
201
|
.replaceAll("__VERSION__", () => JSON.stringify(VERSION));
|
|
185
202
|
}
|
|
@@ -281,6 +298,61 @@ async function getStamp(session) {
|
|
|
281
298
|
}
|
|
282
299
|
}
|
|
283
300
|
|
|
301
|
+
async function readPageThemeSyncRequest(session) {
|
|
302
|
+
try {
|
|
303
|
+
const result = await session.send("Runtime.evaluate", {
|
|
304
|
+
expression: "window.__TRAE_DREAM_SKIN_SYNC_REQUEST__ || null",
|
|
305
|
+
returnByValue: true,
|
|
306
|
+
}, 4000);
|
|
307
|
+
const request = result.result?.value;
|
|
308
|
+
return request && typeof request === "object" && typeof request.id === "string" && typeof request.action === "string" ? request : null;
|
|
309
|
+
} catch {
|
|
310
|
+
return null;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
async function publishThemeSyncState(sessions, state) {
|
|
315
|
+
const expression = `(() => {
|
|
316
|
+
window.__TRAE_DREAM_SKIN_SYNC_STATE__ = ${JSON.stringify(state)};
|
|
317
|
+
window.dispatchEvent(new CustomEvent("trae-dream-skin-sync-state"));
|
|
318
|
+
})()`;
|
|
319
|
+
for (const entry of sessions.values()) {
|
|
320
|
+
if (entry.session.closed) continue;
|
|
321
|
+
await entry.session.send("Runtime.evaluate", { expression, returnByValue: true }, 4000).catch(() => {});
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
function runThemeCli(action, value) {
|
|
326
|
+
const entry = process.env.TWSKIN_CLI_ENTRY;
|
|
327
|
+
if (!entry || !fs.existsSync(entry)) throw new Error("theme sync CLI entry is unavailable");
|
|
328
|
+
const args = action === "check"
|
|
329
|
+
? [entry, "theme", "check", "--json"]
|
|
330
|
+
: action === "sync"
|
|
331
|
+
? [entry, "theme", "sync", "--json"]
|
|
332
|
+
: action === "auto-sync"
|
|
333
|
+
? [entry, "theme", "auto-sync", "--json"]
|
|
334
|
+
: action === "auto-update"
|
|
335
|
+
? [entry, "theme", "auto-update", value ? "on" : "off", "--json"]
|
|
336
|
+
: null;
|
|
337
|
+
if (!args) throw new Error(`unknown theme sync action: ${action}`);
|
|
338
|
+
const result = spawnSync(process.execPath, args, {
|
|
339
|
+
cwd: path.dirname(entry),
|
|
340
|
+
env: process.env,
|
|
341
|
+
encoding: "utf8",
|
|
342
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
343
|
+
});
|
|
344
|
+
if (result.status !== 0) {
|
|
345
|
+
try {
|
|
346
|
+
const payload = JSON.parse(result.stdout || "{}");
|
|
347
|
+
throw new Error(payload.error?.message || result.stderr.trim() || "theme sync failed");
|
|
348
|
+
} catch (error) {
|
|
349
|
+
if (error instanceof SyntaxError) throw new Error(result.stderr.trim() || "theme sync failed");
|
|
350
|
+
throw error;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
return readThemeSyncState();
|
|
354
|
+
}
|
|
355
|
+
|
|
284
356
|
async function cmdList(args) {
|
|
285
357
|
const targets = await listPageTargets(args.port, args.timeoutMs);
|
|
286
358
|
for (const t of targets) {
|
|
@@ -560,6 +632,9 @@ async function cmdWatch(args, payload) {
|
|
|
560
632
|
let enableOnStartup = true;
|
|
561
633
|
let lastReloadRequest = null;
|
|
562
634
|
let reloadPrimed = false;
|
|
635
|
+
let lastThemeSyncRequest = null;
|
|
636
|
+
let themeSyncPrimed = false;
|
|
637
|
+
let nextAutomaticThemeSyncAt = Date.now() + 4_000;
|
|
563
638
|
|
|
564
639
|
const injectTarget = async (target) => {
|
|
565
640
|
const session = await CdpSession.connect(target.webSocketDebuggerUrl, args.timeoutMs);
|
|
@@ -584,6 +659,46 @@ async function cmdWatch(args, payload) {
|
|
|
584
659
|
log(`injected into ${target.id} (${target.url}) -> ${JSON.stringify(r)}`);
|
|
585
660
|
};
|
|
586
661
|
|
|
662
|
+
const rebuildThemePayload = async (openPanel = false) => {
|
|
663
|
+
payload = buildPayload(args);
|
|
664
|
+
for (const entry of sessions.values()) {
|
|
665
|
+
if (entry.session.closed) continue;
|
|
666
|
+
try {
|
|
667
|
+
await injectInto(entry.session, payload);
|
|
668
|
+
} catch (error) {
|
|
669
|
+
log(`theme catalog re-inject failed ${entry.target.id}: ${error.message}`);
|
|
670
|
+
}
|
|
671
|
+
}
|
|
672
|
+
if (openPanel) {
|
|
673
|
+
const entry = sessions.values().next().value;
|
|
674
|
+
if (entry?.session && !entry.session.closed) {
|
|
675
|
+
await entry.session.send("Runtime.evaluate", {
|
|
676
|
+
expression: "window.__TRAE_DREAM_SKIN_GALLERY__?.open?.()",
|
|
677
|
+
returnByValue: true,
|
|
678
|
+
}, 4000).catch(() => {});
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
};
|
|
682
|
+
|
|
683
|
+
const handleThemeSync = async (action, { value = null, openPanel = false, silent = false } = {}) => {
|
|
684
|
+
const current = readThemeSyncState();
|
|
685
|
+
const phase = action === "check" ? "checking" : action === "auto-update" ? "idle" : "downloading";
|
|
686
|
+
if (!silent) {
|
|
687
|
+
await publishThemeSyncState(sessions, { ...current, phase, message: action === "check" ? "正在检查主题更新" : "正在同步官方主题" });
|
|
688
|
+
}
|
|
689
|
+
try {
|
|
690
|
+
const state = runThemeCli(action === "auto-sync" ? "auto-sync" : action, value);
|
|
691
|
+
await publishThemeSyncState(sessions, state);
|
|
692
|
+
log(`theme ${action} completed: ${state.phase}`);
|
|
693
|
+
await rebuildThemePayload(openPanel || state.phase === "success");
|
|
694
|
+
} catch (error) {
|
|
695
|
+
const failed = { ...readThemeSyncState(), phase: "error", message: error instanceof Error ? error.message : String(error) };
|
|
696
|
+
await publishThemeSyncState(sessions, failed);
|
|
697
|
+
log(`theme ${action} failed: ${failed.message}`);
|
|
698
|
+
await rebuildThemePayload(openPanel);
|
|
699
|
+
}
|
|
700
|
+
};
|
|
701
|
+
|
|
587
702
|
const tick = async () => {
|
|
588
703
|
// 单实例约定:pid 文件被其它注入器接管时自动退出,
|
|
589
704
|
// 避免多个守护进程同时注入、互相覆盖(后者启动者胜)
|
|
@@ -680,6 +795,23 @@ async function cmdWatch(args, payload) {
|
|
|
680
795
|
log(`theme reload failed: ${error.message}`);
|
|
681
796
|
}
|
|
682
797
|
}
|
|
798
|
+
|
|
799
|
+
const syncRequest = await readPageThemeSyncRequest(firstEntry.session);
|
|
800
|
+
if (!themeSyncPrimed) {
|
|
801
|
+
themeSyncPrimed = true;
|
|
802
|
+
lastThemeSyncRequest = syncRequest?.id || null;
|
|
803
|
+
} else if (syncRequest && syncRequest.id !== lastThemeSyncRequest) {
|
|
804
|
+
lastThemeSyncRequest = syncRequest.id;
|
|
805
|
+
const action = ["check", "sync", "auto-update"].includes(syncRequest.action) ? syncRequest.action : "check";
|
|
806
|
+
await handleThemeSync(action, {
|
|
807
|
+
value: syncRequest.autoUpdate === true,
|
|
808
|
+
openPanel: true,
|
|
809
|
+
});
|
|
810
|
+
nextAutomaticThemeSyncAt = Date.now() + catalogCheckIntervalMs();
|
|
811
|
+
} else if (Date.now() >= nextAutomaticThemeSyncAt) {
|
|
812
|
+
nextAutomaticThemeSyncAt = Date.now() + catalogCheckIntervalMs();
|
|
813
|
+
await handleThemeSync("auto-sync", { silent: true });
|
|
814
|
+
}
|
|
683
815
|
}
|
|
684
816
|
};
|
|
685
817
|
|
package/runtime/manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"packageVersion": "0.5.
|
|
3
|
+
"packageVersion": "0.5.5",
|
|
4
4
|
"themesBundled": false,
|
|
5
5
|
"files": [
|
|
6
6
|
{
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
},
|
|
11
11
|
{
|
|
12
12
|
"path": "injector.mjs",
|
|
13
|
-
"size":
|
|
14
|
-
"sha256": "
|
|
13
|
+
"size": 31308,
|
|
14
|
+
"sha256": "ed68cba722846616215727222eb8588ac7dcb7fac1b4e7b8b04b27f6146b9db4"
|
|
15
15
|
},
|
|
16
16
|
{
|
|
17
17
|
"path": "restore.sh",
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
},
|
|
21
21
|
{
|
|
22
22
|
"path": "skin.js",
|
|
23
|
-
"size":
|
|
24
|
-
"sha256": "
|
|
23
|
+
"size": 56513,
|
|
24
|
+
"sha256": "190e85b43a0c7d901a9b25cde65d19767bf1099901fb8e75f9fce7a40e2c3ea0"
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
"path": "start.sh",
|
|
@@ -35,8 +35,8 @@
|
|
|
35
35
|
},
|
|
36
36
|
{
|
|
37
37
|
"path": "styles/manager.css",
|
|
38
|
-
"size":
|
|
39
|
-
"sha256": "
|
|
38
|
+
"size": 17342,
|
|
39
|
+
"sha256": "b765d8ad89324af100794c653a23d64e1e647d78a7e9d815eb912189974d7dfc"
|
|
40
40
|
},
|
|
41
41
|
{
|
|
42
42
|
"path": "token-map.mjs",
|
package/runtime/skin.js
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
const TOKEN_MAP = self.DREAM_SKIN_TOKEN_MAP;
|
|
8
8
|
const COMPONENT_MAP = self.DREAM_SKIN_COMPONENT_MAP;
|
|
9
9
|
const CATALOG = __CATALOG__;
|
|
10
|
+
let themeSyncState = __THEME_SYNC_STATE__;
|
|
10
11
|
const DEFAULT_THEME = __DEFAULT_THEME__;
|
|
11
12
|
const VERSION = __VERSION__;
|
|
12
13
|
const BASE_CSS = __BASE_CSS__;
|
|
@@ -666,6 +667,11 @@ ${selector} {
|
|
|
666
667
|
configToggle.type = "button";
|
|
667
668
|
configToggle.textContent = "配置";
|
|
668
669
|
configToggle.title = "查看当前主题配置";
|
|
670
|
+
const syncButton = document.createElement("button");
|
|
671
|
+
syncButton.className = "ds-sync";
|
|
672
|
+
syncButton.type = "button";
|
|
673
|
+
syncButton.textContent = "更新";
|
|
674
|
+
syncButton.title = "检查官方主题更新";
|
|
669
675
|
const reloadButton = document.createElement("button");
|
|
670
676
|
reloadButton.className = "ds-reload";
|
|
671
677
|
reloadButton.type = "button";
|
|
@@ -676,13 +682,15 @@ ${selector} {
|
|
|
676
682
|
closeButton.type = "button";
|
|
677
683
|
closeButton.textContent = "×";
|
|
678
684
|
closeButton.title = "关闭 (Esc)";
|
|
679
|
-
headerActions.append(reloadButton, configToggle, closeButton);
|
|
685
|
+
headerActions.append(syncButton, reloadButton, configToggle, closeButton);
|
|
680
686
|
header.append(headerText, headerActions);
|
|
681
687
|
const panelBody = document.createElement("div");
|
|
682
688
|
panelBody.className = "ds-body";
|
|
683
689
|
|
|
684
690
|
const galleryView = document.createElement("div");
|
|
685
691
|
galleryView.className = "ds-gallery-view";
|
|
692
|
+
const syncBanner = document.createElement("div");
|
|
693
|
+
syncBanner.className = "ds-sync-banner";
|
|
686
694
|
const configView = document.createElement("div");
|
|
687
695
|
configView.className = "ds-config-view";
|
|
688
696
|
const configHead = document.createElement("div");
|
|
@@ -709,6 +717,23 @@ ${selector} {
|
|
|
709
717
|
blurSwitch.setAttribute("role", "switch");
|
|
710
718
|
blurSwitch.setAttribute("aria-label", "面板模糊");
|
|
711
719
|
blurRow.append(blurCopy, blurSwitch);
|
|
720
|
+
const updateRow = document.createElement("div");
|
|
721
|
+
updateRow.className = "ds-setting-row";
|
|
722
|
+
const updateCopy = document.createElement("div");
|
|
723
|
+
updateCopy.className = "ds-setting-copy";
|
|
724
|
+
const updateLabel = document.createElement("div");
|
|
725
|
+
updateLabel.className = "ds-setting-label";
|
|
726
|
+
updateLabel.textContent = "自动更新官方主题";
|
|
727
|
+
const updateDesc = document.createElement("div");
|
|
728
|
+
updateDesc.className = "ds-setting-desc";
|
|
729
|
+
updateDesc.textContent = "发现兼容的新主题或更新时自动下载安装";
|
|
730
|
+
updateCopy.append(updateLabel, updateDesc);
|
|
731
|
+
const updateSwitch = document.createElement("button");
|
|
732
|
+
updateSwitch.className = "ds-switch";
|
|
733
|
+
updateSwitch.type = "button";
|
|
734
|
+
updateSwitch.setAttribute("role", "switch");
|
|
735
|
+
updateSwitch.setAttribute("aria-label", "自动更新官方主题");
|
|
736
|
+
updateRow.append(updateCopy, updateSwitch);
|
|
712
737
|
const brightnessRow = document.createElement("div");
|
|
713
738
|
brightnessRow.className = "ds-setting-row ds-setting-row-slider";
|
|
714
739
|
const brightnessHead = document.createElement("div");
|
|
@@ -769,8 +794,8 @@ ${selector} {
|
|
|
769
794
|
resetActions.className = "ds-reset-actions";
|
|
770
795
|
resetActions.append(resetCancel, resetConfig);
|
|
771
796
|
configHead.append(configName, copyConfig);
|
|
772
|
-
configView.append(configHead, brightnessRow, mainOverlayRow, blurRow, configCode);
|
|
773
|
-
panelBody.append(galleryView, configView);
|
|
797
|
+
configView.append(configHead, updateRow, brightnessRow, mainOverlayRow, blurRow, configCode);
|
|
798
|
+
panelBody.append(syncBanner, galleryView, configView);
|
|
774
799
|
|
|
775
800
|
// 分类 Tab(固定在头部下,不随列表滚动;选择持久化)
|
|
776
801
|
const CATEGORY_LS = `${LS_PREFIX}category`;
|
|
@@ -829,7 +854,7 @@ ${selector} {
|
|
|
829
854
|
)) => {
|
|
830
855
|
if (!theme) return;
|
|
831
856
|
const config = publicThemeConfig(theme);
|
|
832
|
-
configName.textContent = `${theme.name} · ${theme.id}`;
|
|
857
|
+
configName.textContent = `${theme.name} · ${theme.id} · v${theme.version || "0.0.0"}`;
|
|
833
858
|
currentLabel.textContent = `当前:${theme.name}`;
|
|
834
859
|
configCode.textContent = JSON.stringify(config, null, 2);
|
|
835
860
|
};
|
|
@@ -840,6 +865,67 @@ ${selector} {
|
|
|
840
865
|
blurSwitch.setAttribute("aria-checked", String(Boolean(enabled)));
|
|
841
866
|
blurSwitch.title = enabled ? "关闭毛玻璃效果" : "启用毛玻璃效果";
|
|
842
867
|
};
|
|
868
|
+
const requestThemeSync = (action, autoUpdate) => {
|
|
869
|
+
const id = `${Date.now()}-${Math.random().toString(36).slice(2)}`;
|
|
870
|
+
window.__TRAE_DREAM_SKIN_SYNC_REQUEST__ = { id, action, ...(typeof autoUpdate === "boolean" ? { autoUpdate } : {}) };
|
|
871
|
+
themeSyncState = {
|
|
872
|
+
...themeSyncState,
|
|
873
|
+
phase: action === "check" ? "checking" : action === "auto-update" ? "idle" : "downloading",
|
|
874
|
+
message: action === "check" ? "正在检查主题更新" : "正在同步官方主题",
|
|
875
|
+
};
|
|
876
|
+
renderThemeSyncState();
|
|
877
|
+
};
|
|
878
|
+
const syncSummary = () => {
|
|
879
|
+
if (themeSyncState.phase === "checking") return "正在检查主题更新…";
|
|
880
|
+
if (themeSyncState.phase === "downloading" || themeSyncState.phase === "installing") return themeSyncState.message || "正在同步官方主题…";
|
|
881
|
+
if (themeSyncState.phase === "update-available") return `发现 ${themeSyncState.newThemes || 0} 个新主题、${themeSyncState.updatedThemes || 0} 个更新`;
|
|
882
|
+
if (themeSyncState.phase === "success") return themeSyncState.message || "主题同步完成";
|
|
883
|
+
if (themeSyncState.phase === "error") return themeSyncState.message || "主题更新失败";
|
|
884
|
+
return "";
|
|
885
|
+
};
|
|
886
|
+
const renderThemeSyncState = () => {
|
|
887
|
+
const phase = themeSyncState.phase || "idle";
|
|
888
|
+
const summary = syncSummary();
|
|
889
|
+
syncBanner.replaceChildren();
|
|
890
|
+
syncBanner.className = `ds-sync-banner ds-sync-${phase}`;
|
|
891
|
+
if (!summary || phase === "fresh" || phase === "idle") {
|
|
892
|
+
syncBanner.style.display = "none";
|
|
893
|
+
} else {
|
|
894
|
+
syncBanner.style.display = "flex";
|
|
895
|
+
const text = document.createElement("span");
|
|
896
|
+
text.className = "ds-sync-copy";
|
|
897
|
+
text.textContent = summary;
|
|
898
|
+
syncBanner.append(text);
|
|
899
|
+
if (phase === "update-available") {
|
|
900
|
+
const install = document.createElement("button");
|
|
901
|
+
install.type = "button";
|
|
902
|
+
install.className = "ds-sync-action";
|
|
903
|
+
install.textContent = "立即更新";
|
|
904
|
+
install.addEventListener("click", (event) => {
|
|
905
|
+
event.stopPropagation();
|
|
906
|
+
requestThemeSync("sync");
|
|
907
|
+
});
|
|
908
|
+
syncBanner.append(install);
|
|
909
|
+
} else if (phase === "error") {
|
|
910
|
+
const retry = document.createElement("button");
|
|
911
|
+
retry.type = "button";
|
|
912
|
+
retry.className = "ds-sync-action";
|
|
913
|
+
retry.textContent = "重试";
|
|
914
|
+
retry.addEventListener("click", (event) => {
|
|
915
|
+
event.stopPropagation();
|
|
916
|
+
requestThemeSync("check");
|
|
917
|
+
});
|
|
918
|
+
syncBanner.append(retry);
|
|
919
|
+
}
|
|
920
|
+
}
|
|
921
|
+
syncButton.classList.toggle("ds-sync-pending", Number(themeSyncState.updateCount || 0) > 0);
|
|
922
|
+
syncButton.disabled = phase === "checking" || phase === "downloading" || phase === "installing";
|
|
923
|
+
syncButton.title = summary || "检查官方主题更新";
|
|
924
|
+
updateSwitch.setAttribute("aria-checked", String(Boolean(themeSyncState.autoUpdateThemes)));
|
|
925
|
+
updateSwitch.title = themeSyncState.autoUpdateThemes ? "关闭官方主题自动更新" : "开启官方主题自动更新";
|
|
926
|
+
const checkedAt = themeSyncState.lastCheckedAt ? new Date(themeSyncState.lastCheckedAt).toLocaleString() : "尚未检查";
|
|
927
|
+
footerText.textContent = `TRAE Work Skin v${VERSION} · 主题更新:${checkedAt}`;
|
|
928
|
+
};
|
|
843
929
|
renderBrightnessControl = (theme = findTheme(
|
|
844
930
|
(() => { try { return localStorage.getItem(LS_KEY); } catch { return null; } })(),
|
|
845
931
|
), value = theme ? backgroundBrightness(theme) : 1) => {
|
|
@@ -869,6 +955,14 @@ ${selector} {
|
|
|
869
955
|
renderCurrentConfig();
|
|
870
956
|
showConfig(!configOpen);
|
|
871
957
|
});
|
|
958
|
+
syncButton.addEventListener("click", (event) => {
|
|
959
|
+
event.stopPropagation();
|
|
960
|
+
requestThemeSync("check");
|
|
961
|
+
});
|
|
962
|
+
updateSwitch.addEventListener("click", (event) => {
|
|
963
|
+
event.stopPropagation();
|
|
964
|
+
requestThemeSync("auto-update", !themeSyncState.autoUpdateThemes);
|
|
965
|
+
});
|
|
872
966
|
copyConfig.addEventListener("click", async (event) => {
|
|
873
967
|
event.stopPropagation();
|
|
874
968
|
const original = copyConfig.textContent;
|
|
@@ -986,6 +1080,10 @@ ${selector} {
|
|
|
986
1080
|
name.className = "ds-name";
|
|
987
1081
|
name.textContent = theme.name;
|
|
988
1082
|
meta.appendChild(name);
|
|
1083
|
+
const version = document.createElement("span");
|
|
1084
|
+
version.className = "ds-version";
|
|
1085
|
+
version.textContent = `v${theme.version || "0.0.0"}`;
|
|
1086
|
+
meta.appendChild(version);
|
|
989
1087
|
if (theme.desc) {
|
|
990
1088
|
const desc = document.createElement("span");
|
|
991
1089
|
desc.className = "ds-desc";
|
|
@@ -998,6 +1096,7 @@ ${selector} {
|
|
|
998
1096
|
galleryView.appendChild(card);
|
|
999
1097
|
}
|
|
1000
1098
|
applyCategoryFilter();
|
|
1099
|
+
renderThemeSyncState();
|
|
1001
1100
|
|
|
1002
1101
|
const button = document.createElement("button");
|
|
1003
1102
|
button.id = BUTTON_ID;
|
|
@@ -1031,6 +1130,15 @@ ${selector} {
|
|
|
1031
1130
|
window.__TRAE_DREAM_SKIN_RELOAD_REQUEST__ = Date.now();
|
|
1032
1131
|
setTimeout(() => reloadButton.classList.remove("ds-reload-loading"), 6000);
|
|
1033
1132
|
});
|
|
1133
|
+
window.__TRAE_DREAM_SKIN_SYNC_LISTENER__ && window.removeEventListener("trae-dream-skin-sync-state", window.__TRAE_DREAM_SKIN_SYNC_LISTENER__);
|
|
1134
|
+
window.__TRAE_DREAM_SKIN_SYNC_LISTENER__ = () => {
|
|
1135
|
+
const next = window.__TRAE_DREAM_SKIN_SYNC_STATE__;
|
|
1136
|
+
if (next && typeof next === "object") {
|
|
1137
|
+
themeSyncState = next;
|
|
1138
|
+
renderThemeSyncState();
|
|
1139
|
+
}
|
|
1140
|
+
};
|
|
1141
|
+
window.addEventListener("trae-dream-skin-sync-state", window.__TRAE_DREAM_SKIN_SYNC_LISTENER__);
|
|
1034
1142
|
document.addEventListener("click", (e) => {
|
|
1035
1143
|
if (isPanelOpen() && !panel.contains(e.target)) setPanelOpen(false);
|
|
1036
1144
|
});
|