@guillaumemeyer/dsh-themes
v0.1.1
Published
Selectable DSH theme palettes (Tokyo Night, Catppuccin, Dracula, Gruvbox, Nord, One Dark) with live previews, applied from the General settings page.
Readme
🎨 DeepSeek Harness Themes
A selectable set of color themes for DeepSeek Harness (DSH).
It adds a Themes block to the General settings page, showing six theme cards — Tokyo Night, Catppuccin, Dracula, Gruvbox, Nord, One Dark — each with a live color preview. Click a card to apply the theme instantly; click another to switch. The palette is stacked as a token override layer so the app's backgrounds, surfaces, borders, brand/text colors, state colors, and sidebar retint together.
Features
- Six themes with canonical palettes from the upstream projects: Tokyo Night, Catppuccin (Mocha), Dracula, Gruvbox (dark), Nord, One Dark.
- Live preview cards in the General settings row — each card's swatch is drawn from that theme's literal colors, so it stays legible before/while the app is themed.
- Instant apply: one click stacks a
theme.overrideTokenslayer; the selected card highlights and re-selecting another replaces the layer in place. - Undo / revert: the row applies themes on demand; stopping the plugin (or not selecting one) leaves the app on its default theme.
Install (into a DSH deployment)
This is a dsh.client browser plugin, so it must be installed and mounted where DSH
composes its web surface (host/web composition), then the host restarted so the
client-modules node half produces the bundle.
Install the package into the DSH deployment's web app:
npm i @guillaumemeyer/dsh-themesFind the web-surface (browser roster) composition. This is the
cordis.yml/cordis.patch.ymlin the DSH web app that lists the other browser roster rows (ui-settings-general,ui-theme, …). (The shipped@deepseek-ai/dsh-web-appcordis.patch.ymlis the reference for this "browser plugin roster" section.)Add one row to that roster:
- id: ui-themes name: '@guillaumemeyer/dsh-themes'Restart the DSH host. The
@deepseek-ai/dsh-client-modulesnode half re-scans loader entries for packages declaringdsh.client, bundles/plugins/@guillaumemeyer/dsh-themes/client.js, and the browser loads it. (With apnpm run dev:webwatcher, the bundle is rebuilt automatically without a restart; in a production/built deployment a host restart is required.)
The row must live in the web-surface
dsh.clientroster (adsh.clientplatform: "web"package). Placing it in an agent preset or a non-web composition will not be scanned intowindow.__DSH_BOOT__.
Verify it's mounted
After restart, the package's browser bundle is served under
/plugins/@guillaumemeyer/dsh-themes/client.js, and the plugin appears in the
settings.general.item slot.
Use it
- Open Settings (the gear at the sidebar foot).
- Open General.
- Under Themes, click a theme card to apply it. The app retints immediately and the card shows the selected ring.
- Click a different card to switch; the previous override is replaced in place.
Publishing updates
To publish a new version, ensure a local .env (untracked) holds your npm token, then:
cp .env.example .env # once: edit to add NPM_TOKEN=...
npm run release # runs publish:check (preversion), bumps patch, publishes to npm- The token is read from
.envand referenced by the committed.npmrcvia${NPM_TOKEN}, so it is never tracked. preversionrunsnode --check client.js && npm pack --dry-runautomatically before the version bump.- The script is named
releasebecausepublishis a reserved npm lifecycle name: npm auto-runs apublishscript duringnpm publish. Naming itpublishmadenpm publishre-run the script, bumping and publishing a version on every loop.
Notes
- Client-only browser plugin; the node half (
index.js) is an emptyapply. - Selection is in-memory for the page session (the DSH client does not expose localStorage to plugin code, and a settings UI that applies a look doesn't need to persist it); the app returns to its default theme on reload until a card is clicked.
- All six themes are dark palettes, so each maps the token override's
lightanddarkslots to the same value — the theme fully defines its look in both OS schemes. - Package is published with
publishConfig.access: "public";.npmignorediscards repo/dev cruft.
License
MIT
